diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2025-03-12 12:49:38 -0700 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2025-04-23 14:08:21 -0700 |
| commit | 91a853837da22e35d140471058e5d73dbfa87707 (patch) | |
| tree | ff9f3ed012f3e4c7e09763b89fc8dff69ce190a8 /include/system/ioport.h | |
| parent | dfc56946a70052136126f6a207f237af8032d74a (diff) | |
| download | focaccia-qemu-91a853837da22e35d140471058e5d73dbfa87707.tar.gz focaccia-qemu-91a853837da22e35d140471058e5d73dbfa87707.zip | |
include/system: Move exec/ioport.h to system/ioport.h
Convert the existing includes with sed. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'include/system/ioport.h')
| -rw-r--r-- | include/system/ioport.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/include/system/ioport.h b/include/system/ioport.h new file mode 100644 index 0000000000..780ea5a676 --- /dev/null +++ b/include/system/ioport.h @@ -0,0 +1,75 @@ +/* + * defines ioport related functions + * + * Copyright (c) 2003 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +/************************************************************************** + * IO ports API + */ + +#ifndef SYSTEM_IOPORT_H +#define SYSTEM_IOPORT_H + +#include "system/memory.h" + +#define MAX_IOPORTS (64 * 1024) +#define IOPORTS_MASK (MAX_IOPORTS - 1) + +typedef struct MemoryRegionPortio { + uint32_t offset; + uint32_t len; + unsigned size; + uint32_t (*read)(void *opaque, uint32_t address); + void (*write)(void *opaque, uint32_t address, uint32_t data); +} MemoryRegionPortio; + +#define PORTIO_END_OF_LIST() { } + +extern const MemoryRegionOps unassigned_io_ops; + +void cpu_outb(uint32_t addr, uint8_t val); +void cpu_outw(uint32_t addr, uint16_t val); +void cpu_outl(uint32_t addr, uint32_t val); +uint8_t cpu_inb(uint32_t addr); +uint16_t cpu_inw(uint32_t addr); +uint32_t cpu_inl(uint32_t addr); + +typedef struct PortioList { + const struct MemoryRegionPortio *ports; + Object *owner; + struct MemoryRegion *address_space; + uint32_t addr; + unsigned nr; + struct MemoryRegion **regions; + void *opaque; + const char *name; + bool flush_coalesced_mmio; +} PortioList; + +void portio_list_init(PortioList *piolist, Object *owner, + const struct MemoryRegionPortio *callbacks, + void *opaque, const char *name); +void portio_list_set_flush_coalesced(PortioList *piolist); +void portio_list_destroy(PortioList *piolist); +void portio_list_add(PortioList *piolist, + struct MemoryRegion *address_space, + uint32_t addr); +void portio_list_del(PortioList *piolist); +void portio_list_set_enabled(PortioList *piolist, bool enabled); +void portio_list_set_address(PortioList *piolist, uint32_t addr); + +#endif /* IOPORT_H */ |