1296177Sjhibbits/*- 2296177Sjhibbits * Copyright (c) 2011 Semihalf. 3296177Sjhibbits * All rights reserved. 4296177Sjhibbits * 5296177Sjhibbits * Redistribution and use in source and binary forms, with or without 6296177Sjhibbits * modification, are permitted provided that the following conditions 7296177Sjhibbits * are met: 8296177Sjhibbits * 1. Redistributions of source code must retain the above copyright 9296177Sjhibbits * notice, this list of conditions and the following disclaimer. 10296177Sjhibbits * 2. Redistributions in binary form must reproduce the above copyright 11296177Sjhibbits * notice, this list of conditions and the following disclaimer in the 12296177Sjhibbits * documentation and/or other materials provided with the distribution. 13296177Sjhibbits * 14296177Sjhibbits * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15296177Sjhibbits * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16296177Sjhibbits * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17296177Sjhibbits * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18296177Sjhibbits * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19296177Sjhibbits * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20296177Sjhibbits * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21296177Sjhibbits * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22296177Sjhibbits * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23296177Sjhibbits * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24296177Sjhibbits * SUCH DAMAGE. 25296177Sjhibbits */ 26296177Sjhibbits 27296177Sjhibbits#ifndef TYPES_FREEBSD_H_ 28296177Sjhibbits#define TYPES_FREEBSD_H_ 29296177Sjhibbits 30296177Sjhibbits#include <sys/param.h> 31296177Sjhibbits#include <sys/kernel.h> 32296177Sjhibbits#include <sys/libkern.h> 33296177Sjhibbits#include <sys/stddef.h> 34296177Sjhibbits#include <sys/types.h> 35296177Sjhibbits 36296177Sjhibbits#include <machine/pio.h> 37296177Sjhibbits 38296177Sjhibbits#if !defined(__bool_true_false_are_defined) 39296177Sjhibbitstypedef boolean_t bool; 40296177Sjhibbits#endif 41296177Sjhibbits#define TRUE 1 42296177Sjhibbits#define FALSE 0 43296177Sjhibbits 44296177Sjhibbitstypedef vm_paddr_t physAddress_t; 45296177Sjhibbits 46296177Sjhibbits#define _Packed 47296177Sjhibbits#define _PackedType __attribute__ ((packed)) 48296177Sjhibbits 49296177Sjhibbits/** 50296177Sjhibbits * Accessor defines. 51296177Sjhibbits * TODO: These are only stubs and have to be redefined (use bus_space 52296177Sjhibbits * facilities). 53296177Sjhibbits */ 54296177Sjhibbits#define GET_UINT32(arg) in32(&(arg)) 55296177Sjhibbits#define GET_UINT64(arg) in64(&(arg)) 56296177Sjhibbits 57296177Sjhibbits#define _WRITE_UINT32(arg, data) out32(&(arg), (data)) 58296177Sjhibbits#define _WRITE_UINT64(arg, data) out64(&(arg), (data)) 59296177Sjhibbits 60296177Sjhibbits#ifndef QE_32_BIT_ACCESS_RESTRICTION 61296177Sjhibbits 62296177Sjhibbits#define GET_UINT8(arg) in8(&(arg)) 63296177Sjhibbits#define GET_UINT16(arg) in16(&(arg)) 64296177Sjhibbits 65296177Sjhibbits#define _WRITE_UINT8(arg, data) out8(&(arg), (data)) 66296177Sjhibbits#define _WRITE_UINT16(arg, data) out16(&(arg), (data)) 67296177Sjhibbits 68296177Sjhibbits#else /* QE_32_BIT_ACCESS_RESTRICTION */ 69296177Sjhibbits 70296177Sjhibbits#define QE_32_BIT_ADDR(_arg) (uint32_t)((uint32_t)&(_arg) & 0xFFFFFFFC) 71296177Sjhibbits#define QE_32_BIT_SHIFT8(__arg) (uint32_t)((3 - ((uint32_t)&(__arg) & 0x3)) * 8) 72296177Sjhibbits#define QE_32_BIT_SHIFT16(__arg) (uint32_t)((2 - ((uint32_t)&(__arg) & 0x3)) * 8) 73296177Sjhibbits 74296177Sjhibbits#define GET_UINT8(arg) (uint8_t)(in32(QE_32_BIT_ADDR(arg)) >> QE_32_BIT_SHIFT8(arg)) 75296177Sjhibbits#define GET_UINT16(arg) (uint16_t)(in32(QE_32_BIT_ADDR(arg)) >> QE_32_BIT_SHIFT16(arg)) 76296177Sjhibbits 77296177Sjhibbits#define _WRITE_UINT8(arg, data) \ 78296177Sjhibbits do \ 79296177Sjhibbits { \ 80296177Sjhibbits uint32_t addr = QE_32_BIT_ADDR(arg); \ 81296177Sjhibbits uint32_t shift = QE_32_BIT_SHIFT8(arg); \ 82296177Sjhibbits uint32_t tmp = in32(addr); \ 83296177Sjhibbits tmp = (uint32_t)((tmp & ~(0x000000FF << shift)) | ((uint32_t)(data & 0x000000FF) << shift)); \ 84296177Sjhibbits out32(addr, tmp); \ 85296177Sjhibbits } while (0) 86296177Sjhibbits 87296177Sjhibbits#define _WRITE_UINT16(arg, data) \ 88296177Sjhibbits do \ 89296177Sjhibbits { \ 90296177Sjhibbits uint32_t addr = QE_32_BIT_ADDR(arg); \ 91296177Sjhibbits uint32_t shift = QE_32_BIT_SHIFT16(arg); \ 92296177Sjhibbits uint32_t tmp = in32(addr); \ 93296177Sjhibbits tmp = (uint32_t)((tmp & ~(0x0000FFFF << shift)) | ((uint32_t)(data & 0x0000FFFF) << shift)); \ 94296177Sjhibbits out32(addr, tmp); \ 95296177Sjhibbits } while (0) 96296177Sjhibbits 97296177Sjhibbits#endif /* QE_32_BIT_ACCESS_RESTRICTION */ 98296177Sjhibbits 99296177Sjhibbits#define WRITE_UINT8 _WRITE_UINT8 100296177Sjhibbits#define WRITE_UINT16 _WRITE_UINT16 101296177Sjhibbits#define WRITE_UINT32 _WRITE_UINT32 102296177Sjhibbits#define WRITE_UINT64 _WRITE_UINT64 103296177Sjhibbits 104296177Sjhibbits#endif /* TYPES_FREEBSD_H_ */ 105