1022c62cbSPaolo Bonzini /* 2022c62cbSPaolo Bonzini * defines ioport related functions 3022c62cbSPaolo Bonzini * 4022c62cbSPaolo Bonzini * Copyright (c) 2003 Fabrice Bellard 5022c62cbSPaolo Bonzini * 6022c62cbSPaolo Bonzini * This library is free software; you can redistribute it and/or 7022c62cbSPaolo Bonzini * modify it under the terms of the GNU Lesser General Public 8022c62cbSPaolo Bonzini * License as published by the Free Software Foundation; either 961f3c91aSChetan Pant * version 2.1 of the License, or (at your option) any later version. 10022c62cbSPaolo Bonzini * 11022c62cbSPaolo Bonzini * This library is distributed in the hope that it will be useful, 12022c62cbSPaolo Bonzini * but WITHOUT ANY WARRANTY; without even the implied warranty of 13022c62cbSPaolo Bonzini * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14022c62cbSPaolo Bonzini * Lesser General Public License for more details. 15022c62cbSPaolo Bonzini * 16022c62cbSPaolo Bonzini * You should have received a copy of the GNU Lesser General Public 17022c62cbSPaolo Bonzini * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18022c62cbSPaolo Bonzini */ 19022c62cbSPaolo Bonzini 20022c62cbSPaolo Bonzini /************************************************************************** 21022c62cbSPaolo Bonzini * IO ports API 22022c62cbSPaolo Bonzini */ 23022c62cbSPaolo Bonzini 24022c62cbSPaolo Bonzini #ifndef IOPORT_H 25022c62cbSPaolo Bonzini #define IOPORT_H 26022c62cbSPaolo Bonzini 27ec150c7eSMarkus Armbruster #include "exec/memory.h" 28ec150c7eSMarkus Armbruster 29022c62cbSPaolo Bonzini #define MAX_IOPORTS (64 * 1024) 30022c62cbSPaolo Bonzini #define IOPORTS_MASK (MAX_IOPORTS - 1) 31022c62cbSPaolo Bonzini 325767e4e1SJan Kiszka typedef struct MemoryRegionPortio { 335767e4e1SJan Kiszka uint32_t offset; 345767e4e1SJan Kiszka uint32_t len; 355767e4e1SJan Kiszka unsigned size; 365767e4e1SJan Kiszka uint32_t (*read)(void *opaque, uint32_t address); 375767e4e1SJan Kiszka void (*write)(void *opaque, uint32_t address, uint32_t data); 385767e4e1SJan Kiszka } MemoryRegionPortio; 395767e4e1SJan Kiszka 405767e4e1SJan Kiszka #define PORTIO_END_OF_LIST() { } 41022c62cbSPaolo Bonzini 423bb28b72SJan Kiszka #ifndef CONFIG_USER_ONLY 433bb28b72SJan Kiszka extern const MemoryRegionOps unassigned_io_ops; 443bb28b72SJan Kiszka #endif 453bb28b72SJan Kiszka 4689a80e74SPaolo Bonzini void cpu_outb(uint32_t addr, uint8_t val); 4789a80e74SPaolo Bonzini void cpu_outw(uint32_t addr, uint16_t val); 4889a80e74SPaolo Bonzini void cpu_outl(uint32_t addr, uint32_t val); 4989a80e74SPaolo Bonzini uint8_t cpu_inb(uint32_t addr); 5089a80e74SPaolo Bonzini uint16_t cpu_inw(uint32_t addr); 5189a80e74SPaolo Bonzini uint32_t cpu_inl(uint32_t addr); 52022c62cbSPaolo Bonzini 53022c62cbSPaolo Bonzini typedef struct PortioList { 54022c62cbSPaolo Bonzini const struct MemoryRegionPortio *ports; 55db10ca90SPaolo Bonzini Object *owner; 56022c62cbSPaolo Bonzini struct MemoryRegion *address_space; 57ad2b6523SBernhard Beschow uint32_t addr; 58022c62cbSPaolo Bonzini unsigned nr; 59022c62cbSPaolo Bonzini struct MemoryRegion **regions; 60022c62cbSPaolo Bonzini void *opaque; 61022c62cbSPaolo Bonzini const char *name; 62c76bc480SJan Kiszka bool flush_coalesced_mmio; 63022c62cbSPaolo Bonzini } PortioList; 64022c62cbSPaolo Bonzini 65db10ca90SPaolo Bonzini void portio_list_init(PortioList *piolist, Object *owner, 66022c62cbSPaolo Bonzini const struct MemoryRegionPortio *callbacks, 67022c62cbSPaolo Bonzini void *opaque, const char *name); 68c76bc480SJan Kiszka void portio_list_set_flush_coalesced(PortioList *piolist); 69022c62cbSPaolo Bonzini void portio_list_destroy(PortioList *piolist); 70022c62cbSPaolo Bonzini void portio_list_add(PortioList *piolist, 71022c62cbSPaolo Bonzini struct MemoryRegion *address_space, 72022c62cbSPaolo Bonzini uint32_t addr); 73022c62cbSPaolo Bonzini void portio_list_del(PortioList *piolist); 74*f165cdf1SBernhard Beschow void portio_list_set_enabled(PortioList *piolist, bool enabled); 75ad2b6523SBernhard Beschow void portio_list_set_address(PortioList *piolist, uint32_t addr); 76022c62cbSPaolo Bonzini 77022c62cbSPaolo Bonzini #endif /* IOPORT_H */ 78