brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 37bb6e9 Raw
115 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 *  Driver for CPM (SCC/SMC) serial ports4 *5 *  Copyright (C) 2004 Freescale Semiconductor, Inc.6 *7 *  2006 (c) MontaVista Software, Inc.8 *	Vitaly Bordug <vbordug@ru.mvista.com>9 */10#ifndef CPM_UART_H11#define CPM_UART_H12 13#include <linux/platform_device.h>14 15struct gpio_desc;16 17#if defined(CONFIG_CPM2)18#include "asm/cpm2.h"19#elif defined(CONFIG_CPM1)20#include "asm/cpm1.h"21#endif22 23#define DPRAM_BASE	((u8 __iomem *)cpm_muram_addr(0))24 25#define SERIAL_CPM_MAJOR	20426#define SERIAL_CPM_MINOR	4627 28#define IS_SMC(pinfo)		(pinfo->flags & FLAG_SMC)29#define FLAG_SMC	0x0000000230#define FLAG_CONSOLE	0x0000000131 32#define UART_NR		633 34#define RX_NUM_FIFO	435#define RX_BUF_SIZE	3236#define TX_NUM_FIFO	437#define TX_BUF_SIZE	3238 39#define GPIO_CTS	040#define GPIO_RTS	141#define GPIO_DCD	242#define GPIO_DSR	343#define GPIO_DTR	444#define GPIO_RI		545 46#define NUM_GPIOS	(GPIO_RI+1)47 48struct uart_cpm_port {49	struct uart_port	port;50	u16			rx_nrfifos;51	u16			rx_fifosize;52	u16			tx_nrfifos;53	u16			tx_fifosize;54	smc_t __iomem		*smcp;55	smc_uart_t __iomem	*smcup;56	scc_t __iomem		*sccp;57	scc_uart_t __iomem	*sccup;58	cbd_t __iomem		*rx_bd_base;59	cbd_t __iomem		*rx_cur;60	cbd_t __iomem		*tx_bd_base;61	cbd_t __iomem		*tx_cur;62	unsigned char		*tx_buf;63	unsigned char		*rx_buf;64	u32			flags;65	struct clk		*clk;66	u8			brg;67	uint			 dp_addr;68	void			*mem_addr;69	dma_addr_t		 dma_addr;70	u32			mem_size;71	/* wait on close if needed */72	int			wait_closing;73	/* value to combine with opcode to form cpm command */74	u32			command;75	struct gpio_desc	*gpios[NUM_GPIOS];76};77 78/*79   virtual to phys transtalion80*/81static inline unsigned long cpu2cpm_addr(void *addr,82                                         struct uart_cpm_port *pinfo)83{84	int offset;85	u32 val = (u32)addr;86	u32 mem = (u32)pinfo->mem_addr;87	/* sane check */88	if (likely(val >= mem && val < mem + pinfo->mem_size)) {89		offset = val - mem;90		return pinfo->dma_addr + offset;91	}92	/* something nasty happened */93	BUG();94	return 0;95}96 97static inline void *cpm2cpu_addr(unsigned long addr,98                                 struct uart_cpm_port *pinfo)99{100	int offset;101	u32 val = addr;102	u32 dma = (u32)pinfo->dma_addr;103	/* sane check */104	if (likely(val >= dma && val < dma + pinfo->mem_size)) {105		offset = val - dma;106		return pinfo->mem_addr + offset;107	}108	/* something nasty happened */109	BUG();110	return NULL;111}112 113 114#endif /* CPM_UART_H */115