1/** 2 * \file 3 * \brief High-level capability helpers 4 */ 5 6/* 7 * Copyright (c) 2007, 2008, 2009, 2010, 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 CAPABILITIES_ARCH_X86_H 16#define CAPABILITIES_ARCH_X86_H 17 18/** 19 * \brief Invoke an IO capability to read a byte 20 * 21 * \param iocap IO capability 22 * \param port IO port number 23 * \param data Pointer to returned value 24 */ 25static inline errval_t 26iocap_in8(struct capref iocap, uint16_t port, uint8_t *data) 27{ 28 uint32_t tmp = 0; 29 errval_t err = invoke_iocap_in(iocap, IOCmd_Inb, port, &tmp); 30 if (err_is_ok(err)) { 31 *data = tmp; 32 } 33 return err; 34} 35 36/** 37 * \brief Invoke an IO capability to read a 16-bit value 38 * 39 * \param iocap IO capability 40 * \param port IO port number 41 * \param data Pointer to returned value 42 * 43 * \return Error code 44 */ 45static inline errval_t 46iocap_in16(struct capref iocap, uint16_t port, uint16_t *data) 47{ 48 uint32_t tmp = 0; 49 errval_t err = invoke_iocap_in(iocap, IOCmd_Inw, port, &tmp); 50 if (err_is_ok(err)) { 51 *data = tmp; 52 } 53 return err; 54} 55 56/** 57 * \brief Invoke an IO capability to read a 32-bit value 58 * 59 * \param iocap IO capability 60 * \param port IO port number 61 * \param data Pointer to returned value 62 */ 63static inline errval_t 64iocap_in32(struct capref iocap, uint16_t port, uint32_t *data) 65{ 66 return invoke_iocap_in(iocap, IOCmd_Ind, port, data); 67} 68 69/** 70 * \brief Invoke an IO capability to write a byte 71 * 72 * \param iocap IO capability 73 * \param port IO port number 74 * \param data Output data 75 */ 76static inline errval_t 77iocap_out8(struct capref iocap, uint16_t port, uint8_t data) 78{ 79 return invoke_iocap_out(iocap, IOCmd_Outb, port, data); 80} 81 82/** 83 * \brief Invoke an IO capability to write a 16-bit value 84 * 85 * \param iocap IO capability 86 * \param port IO port number 87 * \param data Output data 88 */ 89static inline errval_t 90iocap_out16(struct capref iocap, uint16_t port, uint16_t data) 91{ 92 return invoke_iocap_out(iocap, IOCmd_Outw, port, data); 93} 94 95/** 96 * \brief Invoke an IO capability to write a 32-bit value 97 * 98 * \param iocap IO capability 99 * \param port IO port number 100 * \param data Output data 101 */ 102static inline errval_t 103iocap_out32(struct capref iocap, uint16_t port, uint32_t data) 104{ 105 return invoke_iocap_out(iocap, IOCmd_Outd, port, data); 106} 107 108#endif 109