1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2001 Russell King, All Rights Reserved.
7 #include <linux/errno.h>
8 #include <linux/ioport.h>
10 #include <linux/types.h>
13 #include "8250_pcilib.h"
15 int serial_8250_warn_need_ioport(struct pci_dev
*dev
)
18 "Serial port not supported because of missing I/O resource\n");
22 EXPORT_SYMBOL_NS_GPL(serial_8250_warn_need_ioport
, "SERIAL_8250_PCI");
24 int serial8250_pci_setup_port(struct pci_dev
*dev
, struct uart_8250_port
*port
,
25 u8 bar
, unsigned int offset
, int regshift
)
27 if (bar
>= PCI_STD_NUM_BARS
)
30 if (pci_resource_flags(dev
, bar
) & IORESOURCE_MEM
) {
31 if (!pcim_iomap(dev
, bar
, 0) && !pcim_iomap_table(dev
))
34 port
->port
.iotype
= UPIO_MEM
;
35 port
->port
.iobase
= 0;
36 port
->port
.mapbase
= pci_resource_start(dev
, bar
) + offset
;
37 port
->port
.membase
= pcim_iomap_table(dev
)[bar
] + offset
;
38 port
->port
.regshift
= regshift
;
39 } else if (IS_ENABLED(CONFIG_HAS_IOPORT
)) {
40 port
->port
.iotype
= UPIO_PORT
;
41 port
->port
.iobase
= pci_resource_start(dev
, bar
) + offset
;
42 port
->port
.mapbase
= 0;
43 port
->port
.membase
= NULL
;
44 port
->port
.regshift
= 0;
46 return serial_8250_warn_need_ioport(dev
);
50 EXPORT_SYMBOL_NS_GPL(serial8250_pci_setup_port
, "SERIAL_8250_PCI");
51 MODULE_DESCRIPTION("8250 PCI library");
52 MODULE_LICENSE("GPL");