1/*
2 * Copyright 2021, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <Htif.h>
8
9
10uint64
11HtifCmd(uint32 device, uint8 cmd, uint32 arg)
12{
13	if (gHtifRegs == 0)
14		return 0;
15
16	uint64 htifTohost = ((uint64)device << 56)
17		+ ((uint64)cmd << 48) + arg;
18	gHtifRegs->toHostLo = htifTohost % ((uint64)1 << 32);
19	gHtifRegs->toHostHi = htifTohost / ((uint64)1 << 32);
20	return (uint64)gHtifRegs->fromHostLo
21		+ ((uint64)gHtifRegs->fromHostHi << 32);
22}
23
24
25void
26HtifShutdown()
27{
28	HtifCmd(0, 0, 1);
29}
30
31
32void
33HtifOutChar(char ch)
34{
35	HtifCmd(1, 1, ch);
36}
37
38
39void
40HtifOutString(const char *str)
41{
42	for (; *str != '\0'; str++)
43		HtifOutChar(*str);
44}
45
46
47void
48HtifOutString(const char *str, size_t len)
49{
50	for (; len > 0; str++, len--)
51		HtifOutChar(*str);
52}
53