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