xref: /openbmc/qemu/include/exec/ioport.h (revision 5767815218efd3cbfd409505ed824d5f356044ae)
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