1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2002
4 * Daniel Engstr��m, Omicron Ceti AB, daniel@omicron.se
5 */
6
7#ifndef _PCI_I386_H_
8#define _PCI_I386_H_
9
10#include <pci.h>
11
12/* bus mapping constants (used for PCI core initialization) */
13#define PCI_REG_ADDR	0xcf8
14#define PCI_REG_DATA	0xcfc
15
16#define PCI_CFG_EN	0x80000000
17
18#ifndef __ASSEMBLY__
19
20/**
21 * pci_x86_read_config() - Read a configuration value from a device
22 *
23 * This function can be called before PCI is set up in driver model.
24 *
25 * @bdf:	PCI device address: bus, device and function -see PCI_BDF()
26 * @offset:	Register offset to read
27 * @valuep:	Place to put the returned value
28 * @size:	Access size
29 * Return: 0 if OK, -ve on error
30 */
31int pci_x86_read_config(pci_dev_t bdf, uint offset, ulong *valuep,
32			enum pci_size_t size);
33
34/**
35 * pci_bus_write_config() - Write a configuration value to a device
36 *
37 * This function can be called before PCI is set up in driver model.
38 *
39 * @bdf:	PCI device address: bus, device and function -see PCI_BDF()
40 * @offset:	Register offset to write
41 * @value:	Value to write
42 * @size:	Access size
43 * Return: 0 if OK, -ve on error
44 */
45int pci_x86_write_config(pci_dev_t bdf, uint offset, ulong value,
46			 enum pci_size_t size);
47
48/**
49 * pci_bus_clrset_config32() - Update a configuration value for a device
50 *
51 * The register at @offset is updated to (oldvalue & ~clr) | set. This function
52 * can be called before PCI is set up in driver model.
53 *
54 * @bdf:	PCI device address: bus, device and function -see PCI_BDF()
55 * @offset:	Register offset to update
56 * @clr:	Bits to clear
57 * @set:	Bits to set
58 * Return: 0 if OK, -ve on error
59 */
60int pci_x86_clrset_config(pci_dev_t bdf, uint offset, ulong clr, ulong set,
61			  enum pci_size_t size);
62
63/**
64 * Assign IRQ number to a PCI device
65 *
66 * This function assigns IRQ for a PCI device. If the device does not exist
67 * or does not require interrupts then this function has no effect.
68 *
69 * @bus:	PCI bus number
70 * @device:	PCI device number
71 * @irq:	An array of IRQ numbers that are assigned to INTA through
72 *		INTD of this PCI device.
73 */
74void pci_assign_irqs(int bus, int device, u8 irq[4]);
75
76#endif /* __ASSEMBLY__ */
77
78#endif /* _PCI_I386_H_ */
79