1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 * See "LICENSE_BSD2.txt" for details.
9 *
10 * @TAG(DATA61_BSD)
11 */
12#pragma once
13
14#include <stdint.h>
15#include <utils/arith.h>
16
17/* Generic IOPort in/out functions. */
18
19void libpci_out32(uint32_t port_no, uint32_t val);
20uint32_t libpci_in32(uint32_t port_no);
21void libpci_out16(uint32_t port_no, uint32_t val);
22uint32_t libpci_in16(uint32_t port_no);
23void libpci_out8(uint32_t port_no, uint32_t val);
24uint32_t libpci_in8(uint32_t port_no);
25void libpci_out(uint32_t port_no, uint32_t val, uint8_t size);
26uint32_t libpci_in(uint32_t port_no, uint8_t size);
27
28/* IOPort device access functions. */
29
30uint32_t libpci_read_reg32(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg);
31void libpci_write_reg32(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg, uint32_t val);
32uint16_t libpci_read_reg16(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg);
33void libpci_write_reg16(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg, uint16_t val);
34uint16_t libpci_read_reg8(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg);
35void libpci_write_reg8(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg, uint8_t val);
36uint32_t libpci_read_reg(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg, uint8_t size);
37void libpci_write_reg(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t reg, uint32_t val, uint8_t size);
38
39/* Reverse look up which device is associated with a given IOPort number. */
40void libpci_portno_reverse_lookup(uint32_t port_no, uint8_t *bus, uint8_t *dev, uint8_t *fun,
41                                  uint8_t *reg);
42