20#if defined(CONFIG_XENO_DRIVERS_16550A_PCI)
24struct rt_16550_pci_board {
26 resource_size_t resource_base_addr;
28 unsigned int port_ofs;
29 unsigned long irqtype;
30 unsigned int baud_base;
34#if defined(CONFIG_XENO_DRIVERS_16550A_PCI_MOXA)
36#define PCI_DEVICE_ID_CP112UL 0x1120
37#define PCI_DEVICE_ID_CP114UL 0x1143
38#define PCI_DEVICE_ID_CP138U 0x1380
39#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0)
40#define PCI_DEVICE_ID_MOXA_CP102UL 0x1021
41#define PCI_DEVICE_ID_MOXA_CP102U 0x1022
42#define PCI_DEVICE_ID_MOXA_C104 0x1040
43#define PCI_DEVICE_ID_MOXA_CP104U 0x1041
44#define PCI_DEVICE_ID_MOXA_CP114 0x1141
45#define PCI_DEVICE_ID_MOXA_CP118U 0x1180
46#define PCI_DEVICE_ID_MOXA_CP132 0x1320
47#define PCI_DEVICE_ID_MOXA_CP132U 0x1321
48#define PCI_DEVICE_ID_MOXA_CP134U 0x1340
49#define PCI_DEVICE_ID_MOXA_C168 0x1680
50#define PCI_DEVICE_ID_MOXA_CP168U 0x1681
53static const struct rt_16550_pci_board rt_16550_moxa_c104 = {
54 .name =
"Moxa C104H/PCI",
55 .resource_base_addr = 2,
63static const struct rt_16550_pci_board rt_16550_moxa_c168 = {
64 .name =
"Moxa C168H/PCI",
65 .resource_base_addr = 2,
73static const struct rt_16550_pci_board rt_16550_moxa_cp114 = {
74 .name =
"Moxa CP-114",
75 .resource_base_addr = 2,
83static const struct rt_16550_pci_board rt_16550_moxa_cp132 = {
84 .name =
"Moxa CP-132",
85 .resource_base_addr = 2,
93static const struct rt_16550_pci_board rt_16550_moxa_cp102u = {
94 .name =
"Moxa CP-102U",
95 .resource_base_addr = 2,
103static const struct rt_16550_pci_board rt_16550_moxa_cp102ul = {
104 .name =
"Moxa CP-102UL",
105 .resource_base_addr = 2,
113static const struct rt_16550_pci_board rt_16550_moxa_cp104u = {
114 .name =
"Moxa CP-104U",
115 .resource_base_addr = 2,
123static const struct rt_16550_pci_board rt_16550_moxa_cp112ul = {
124 .name =
"Moxa CP-112UL",
125 .resource_base_addr = 2,
133static const struct rt_16550_pci_board rt_16550_moxa_cp114ul = {
134 .name =
"Moxa CP-114UL",
135 .resource_base_addr = 2,
143static const struct rt_16550_pci_board rt_16550_moxa_cp118u = {
144 .name =
"Moxa CP-118U",
145 .resource_base_addr = 2,
153static const struct rt_16550_pci_board rt_16550_moxa_cp132u = {
154 .name =
"Moxa CP-132U",
155 .resource_base_addr = 2,
163static const struct rt_16550_pci_board rt_16550_moxa_cp134u = {
164 .name =
"Moxa CP-134U",
165 .resource_base_addr = 2,
173static const struct rt_16550_pci_board rt_16550_moxa_cp138u = {
174 .name =
"Moxa CP-138U",
175 .resource_base_addr = 2,
183static const struct rt_16550_pci_board rt_16550_moxa_cp168u = {
184 .name =
"Moxa CP-168U",
185 .resource_base_addr = 2,
194const struct pci_device_id rt_16550_pci_table[] = {
195#if defined(CONFIG_XENO_DRIVERS_16550A_PCI_MOXA)
196 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C104),
197 .driver_data = (
unsigned long)&rt_16550_moxa_c104},
198 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C168),
199 .driver_data = (
unsigned long)&rt_16550_moxa_c168},
200 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114),
201 .driver_data = (
unsigned long)&rt_16550_moxa_cp114},
202 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132),
203 .driver_data = (
unsigned long)&rt_16550_moxa_cp132},
204 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102U),
205 .driver_data = (
unsigned long)&rt_16550_moxa_cp102u},
206 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102UL),
207 .driver_data = (
unsigned long)&rt_16550_moxa_cp102ul},
208 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104U),
209 .driver_data = (
unsigned long)&rt_16550_moxa_cp104u},
210 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP112UL),
211 .driver_data = (
unsigned long)&rt_16550_moxa_cp112ul},
212 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP114UL),
213 .driver_data = (
unsigned long)&rt_16550_moxa_cp114ul},
214 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118U),
215 .driver_data = (
unsigned long)&rt_16550_moxa_cp118u},
216 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132U),
217 .driver_data = (
unsigned long)&rt_16550_moxa_cp132u},
218 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134U),
219 .driver_data = (
unsigned long)&rt_16550_moxa_cp134u},
220 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP138U),
221 .driver_data = (
unsigned long)&rt_16550_moxa_cp138u},
222 {PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168U),
223 .driver_data = (
unsigned long)&rt_16550_moxa_cp168u},
228static int rt_16550_pci_probe(
struct pci_dev *pdev,
229 const struct pci_device_id *ent)
231 struct rt_16550_pci_board *board;
238 if (!ent->driver_data)
241 board = (
struct rt_16550_pci_board *)ent->driver_data;
243 for (i = 0; i < MAX_DEVICES; i++)
244 if (!rt_16550_addr_param(i))
247 if (board->nports > max_devices)
250 if ((err = pci_enable_device(pdev)))
253 base_addr = pci_resource_start(pdev, board->resource_base_addr);
255 for (i = 0; i < MAX_DEVICES; i++) {
256 if ((port < board->nports) && (!rt_16550_addr_param(i))) {
257 io[i] = base_addr + port * board->port_ofs;
259 irqtype[i] = board->irqtype;
260 baud_base[i] = board->baud_base;
261 tx_fifo[i] = board->tx_fifo;
269static void rt_16550_pci_remove(
struct pci_dev *pdev) {
270 pci_disable_device( pdev );
273static struct pci_driver rt_16550_pci_driver = {
274 .name = RT_16550_DRIVER_NAME,
275 .id_table = rt_16550_pci_table,
276 .probe = rt_16550_pci_probe,
277 .remove = rt_16550_pci_remove
280static int pci_registered;
282static inline void rt_16550_pci_init(
void)
284 if (pci_register_driver(&rt_16550_pci_driver) == 0)
288static inline void rt_16550_pci_cleanup(
void)
291 pci_unregister_driver(&rt_16550_pci_driver);
296#define rt_16550_pci_init() do { } while (0)
297#define rt_16550_pci_cleanup() do { } while (0)
#define RTDM_IRQTYPE_SHARED
Enable IRQ-sharing with other real-time drivers.
Definition driver.h:812