1/**
2 * \file
3 * \brief Mackerel support
4 */
5
6/*
7 * Copyright (c) 2008, 2009, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef LIBBARRELFISH_MACKEREL_H
16#define LIBBARRELFISH_MACKEREL_H
17
18#include <stdio.h>
19
20#if defined(__x86_64__) || defined(__i386__)
21// [2009-09-10 ohodson] TODO: Review moving this to a separate
22// file like msr's in ia32_spaces.h.
23#include <mackerel/io.h>
24#endif
25
26/*
27 * Device address space types
28 */
29typedef char    *mackerel_addr_t;
30
31/*
32 * Reading from memory
33 */
34static inline uint8_t mackerel_read_addr_8( mackerel_addr_t base, int offset)
35{
36    volatile uint8_t *p = (volatile uint8_t *)(base + offset);
37    return *p;
38}
39
40static inline uint16_t mackerel_read_addr_16( mackerel_addr_t base, int offset)
41{
42    volatile uint16_t *p = (volatile uint16_t *)(base + offset);
43    return *p;
44}
45static inline uint32_t mackerel_read_addr_32( mackerel_addr_t base, int offset)
46{
47    volatile uint32_t *p = (volatile uint32_t *)(base + offset);
48    return *p;
49}
50static inline uint64_t mackerel_read_addr_64( mackerel_addr_t base, int offset)
51{
52    volatile uint64_t *p = (volatile uint64_t *)(base + offset);
53    return *p;
54}
55
56/*
57 * Writing to memory
58 */
59static inline void mackerel_write_addr_8( mackerel_addr_t base,
60                                             int offset, uint8_t v)
61{
62    volatile uint8_t *p = (volatile uint8_t *)(base + offset);
63    *p = v;
64}
65
66static inline void mackerel_write_addr_16( mackerel_addr_t base,
67                                               int offset, uint16_t v)
68{
69    volatile uint16_t *p = (volatile uint16_t *)(base + offset);
70    *p = v;
71}
72static inline void mackerel_write_addr_32( mackerel_addr_t base,
73                                               int offset, uint32_t v)
74{
75    volatile uint32_t *p = (volatile uint32_t *)(base + offset);
76    *p = v;
77}
78static inline void mackerel_write_addr_64( mackerel_addr_t base,
79                                               int offset, uint64_t v)
80{
81    volatile uint64_t *p = (volatile uint64_t *)(base + offset);
82    *p = v;
83}
84
85
86#endif // LIBBARRELFISH_MACKEREL_H
87
88