162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Definitions for PCDP-defined console devices
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * For DIG64_HCDPv10a_01.pdf and DIG64_PCDPv20.pdf (v1.0a and v2.0 resp.),
662306a36Sopenharmony_ci * please see <http://www.dig64.org/specifications/>
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * (c) Copyright 2002, 2004 Hewlett-Packard Development Company, L.P.
962306a36Sopenharmony_ci *	Khalid Aziz <khalid.aziz@hp.com>
1062306a36Sopenharmony_ci *	Bjorn Helgaas <bjorn.helgaas@hp.com>
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define PCDP_CONSOLE			0
1462306a36Sopenharmony_ci#define PCDP_DEBUG			1
1562306a36Sopenharmony_ci#define PCDP_CONSOLE_OUTPUT		2
1662306a36Sopenharmony_ci#define PCDP_CONSOLE_INPUT		3
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define PCDP_UART			(0 << 3)
1962306a36Sopenharmony_ci#define PCDP_VGA			(1 << 3)
2062306a36Sopenharmony_ci#define PCDP_USB			(2 << 3)
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* pcdp_uart.type and pcdp_device.type */
2362306a36Sopenharmony_ci#define PCDP_CONSOLE_UART		(PCDP_UART | PCDP_CONSOLE)
2462306a36Sopenharmony_ci#define PCDP_DEBUG_UART			(PCDP_UART | PCDP_DEBUG)
2562306a36Sopenharmony_ci#define PCDP_CONSOLE_VGA		(PCDP_VGA  | PCDP_CONSOLE_OUTPUT)
2662306a36Sopenharmony_ci#define PCDP_CONSOLE_USB		(PCDP_USB  | PCDP_CONSOLE_INPUT)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* pcdp_uart.flags */
2962306a36Sopenharmony_ci#define PCDP_UART_EDGE_SENSITIVE	(1 << 0)
3062306a36Sopenharmony_ci#define PCDP_UART_ACTIVE_LOW		(1 << 1)
3162306a36Sopenharmony_ci#define PCDP_UART_PRIMARY_CONSOLE	(1 << 2)
3262306a36Sopenharmony_ci#define PCDP_UART_IRQ			(1 << 6) /* in pci_func for rev < 3 */
3362306a36Sopenharmony_ci#define PCDP_UART_PCI			(1 << 7) /* in pci_func for rev < 3 */
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct pcdp_uart {
3662306a36Sopenharmony_ci	u8				type;
3762306a36Sopenharmony_ci	u8				bits;
3862306a36Sopenharmony_ci	u8				parity;
3962306a36Sopenharmony_ci	u8				stop_bits;
4062306a36Sopenharmony_ci	u8				pci_seg;
4162306a36Sopenharmony_ci	u8				pci_bus;
4262306a36Sopenharmony_ci	u8				pci_dev;
4362306a36Sopenharmony_ci	u8				pci_func;
4462306a36Sopenharmony_ci	u64				baud;
4562306a36Sopenharmony_ci	struct acpi_generic_address	addr;
4662306a36Sopenharmony_ci	u16				pci_dev_id;
4762306a36Sopenharmony_ci	u16				pci_vendor_id;
4862306a36Sopenharmony_ci	u32				gsi;
4962306a36Sopenharmony_ci	u32				clock_rate;
5062306a36Sopenharmony_ci	u8				pci_prog_intfc;
5162306a36Sopenharmony_ci	u8				flags;
5262306a36Sopenharmony_ci	u16				conout_index;
5362306a36Sopenharmony_ci	u32				reserved;
5462306a36Sopenharmony_ci} __attribute__((packed));
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define PCDP_IF_PCI	1
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/* pcdp_if_pci.trans */
5962306a36Sopenharmony_ci#define PCDP_PCI_TRANS_IOPORT	0x02
6062306a36Sopenharmony_ci#define PCDP_PCI_TRANS_MMIO	0x01
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cistruct pcdp_if_pci {
6362306a36Sopenharmony_ci	u8			interconnect;
6462306a36Sopenharmony_ci	u8			reserved;
6562306a36Sopenharmony_ci	u16			length;
6662306a36Sopenharmony_ci	u8			segment;
6762306a36Sopenharmony_ci	u8			bus;
6862306a36Sopenharmony_ci	u8			dev;
6962306a36Sopenharmony_ci	u8			fun;
7062306a36Sopenharmony_ci	u16			dev_id;
7162306a36Sopenharmony_ci	u16			vendor_id;
7262306a36Sopenharmony_ci	u32			acpi_interrupt;
7362306a36Sopenharmony_ci	u64			mmio_tra;
7462306a36Sopenharmony_ci	u64			ioport_tra;
7562306a36Sopenharmony_ci	u8			flags;
7662306a36Sopenharmony_ci	u8			trans;
7762306a36Sopenharmony_ci} __attribute__((packed));
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistruct pcdp_vga {
8062306a36Sopenharmony_ci	u8			count;		/* address space descriptors */
8162306a36Sopenharmony_ci} __attribute__((packed));
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci/* pcdp_device.flags */
8462306a36Sopenharmony_ci#define PCDP_PRIMARY_CONSOLE	1
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cistruct pcdp_device {
8762306a36Sopenharmony_ci	u8			type;
8862306a36Sopenharmony_ci	u8			flags;
8962306a36Sopenharmony_ci	u16			length;
9062306a36Sopenharmony_ci	u16			efi_index;
9162306a36Sopenharmony_ci	/* next data is pcdp_if_pci or pcdp_if_acpi (not yet supported) */
9262306a36Sopenharmony_ci	/* next data is device specific type (currently only pcdp_vga) */
9362306a36Sopenharmony_ci} __attribute__((packed));
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistruct pcdp {
9662306a36Sopenharmony_ci	u8			signature[4];
9762306a36Sopenharmony_ci	u32			length;
9862306a36Sopenharmony_ci	u8			rev;		/* PCDP v2.0 is rev 3 */
9962306a36Sopenharmony_ci	u8			chksum;
10062306a36Sopenharmony_ci	u8			oemid[6];
10162306a36Sopenharmony_ci	u8			oem_tabid[8];
10262306a36Sopenharmony_ci	u32			oem_rev;
10362306a36Sopenharmony_ci	u8			creator_id[4];
10462306a36Sopenharmony_ci	u32			creator_rev;
10562306a36Sopenharmony_ci	u32			num_uarts;
10662306a36Sopenharmony_ci	struct pcdp_uart	uart[];	/* actual size is num_uarts */
10762306a36Sopenharmony_ci	/* remainder of table is pcdp_device structures */
10862306a36Sopenharmony_ci} __attribute__((packed));
109