/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Serial core related functions, serial port device drivers do not need this.
 *
 * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
 * Author: Tony Lindgren <tony@atomide.com>
 */

#define to_serial_base_ctrl_device(d) container_of((d), struct serial_ctrl_device, dev)
#define to_serial_base_port_device(d) container_of((d), struct serial_port_device, dev)

struct uart_driver;
struct uart_port;
struct device_driver;
struct device;

struct serial_ctrl_device {
	struct device dev;
	struct ida port_ida;
};

struct serial_port_device {
	struct device dev;
	struct uart_port *port;
};

int serial_base_ctrl_init(void);
void serial_base_ctrl_exit(void);

int serial_base_port_init(void);
void serial_base_port_exit(void);

int serial_base_driver_register(struct device_driver *driver);
void serial_base_driver_unregister(struct device_driver *driver);

struct serial_ctrl_device *serial_base_ctrl_add(struct uart_port *port,
						struct device *parent);
struct serial_port_device *serial_base_port_add(struct uart_port *port,
						struct serial_ctrl_device *parent);
void serial_base_ctrl_device_remove(struct serial_ctrl_device *ctrl_dev);
void serial_base_port_device_remove(struct serial_port_device *port_dev);

int serial_ctrl_register_port(struct uart_driver *drv, struct uart_port *port);
void serial_ctrl_unregister_port(struct uart_driver *drv, struct uart_port *port);

int serial_core_register_port(struct uart_driver *drv, struct uart_port *port);
void serial_core_unregister_port(struct uart_driver *drv, struct uart_port *port);
