You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
2.8 KiB
126 lines
2.8 KiB
#ifndef __SAMSUNG_H |
|
#define __SAMSUNG_H |
|
|
|
/* |
|
* Driver for Samsung SoC onboard UARTs. |
|
* |
|
* Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics |
|
* http://armlinux.simtec.co.uk/ |
|
* |
|
* This program is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License version 2 as |
|
* published by the Free Software Foundation. |
|
*/ |
|
|
|
#include <linux/dmaengine.h> |
|
|
|
struct s3c24xx_uart_info { |
|
char *name; |
|
unsigned int type; |
|
unsigned int fifosize; |
|
unsigned long rx_fifomask; |
|
unsigned long rx_fifoshift; |
|
unsigned long rx_fifofull; |
|
unsigned long tx_fifomask; |
|
unsigned long tx_fifoshift; |
|
unsigned long tx_fifofull; |
|
unsigned int def_clk_sel; |
|
unsigned long num_clks; |
|
unsigned long clksel_mask; |
|
unsigned long clksel_shift; |
|
|
|
/* uart port features */ |
|
|
|
unsigned int has_divslot:1; |
|
|
|
/* uart controls */ |
|
int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *); |
|
}; |
|
|
|
struct s3c24xx_serial_drv_data { |
|
struct s3c24xx_uart_info *info; |
|
struct s3c2410_uartcfg *def_cfg; |
|
unsigned int fifosize[CONFIG_SERIAL_SAMSUNG_UARTS]; |
|
}; |
|
|
|
struct s3c24xx_uart_dma { |
|
dma_filter_fn fn; |
|
void *rx_param; |
|
void *tx_param; |
|
|
|
unsigned int rx_chan_id; |
|
unsigned int tx_chan_id; |
|
|
|
struct dma_slave_config rx_conf; |
|
struct dma_slave_config tx_conf; |
|
|
|
struct dma_chan *rx_chan; |
|
struct dma_chan *tx_chan; |
|
|
|
dma_addr_t rx_addr; |
|
dma_addr_t tx_addr; |
|
|
|
dma_cookie_t rx_cookie; |
|
dma_cookie_t tx_cookie; |
|
|
|
char *rx_buf; |
|
|
|
dma_addr_t tx_transfer_addr; |
|
|
|
size_t rx_size; |
|
size_t tx_size; |
|
|
|
struct dma_async_tx_descriptor *tx_desc; |
|
struct dma_async_tx_descriptor *rx_desc; |
|
|
|
int tx_bytes_requested; |
|
int rx_bytes_requested; |
|
}; |
|
|
|
struct s3c24xx_uart_port { |
|
unsigned char rx_claimed; |
|
unsigned char tx_claimed; |
|
unsigned int pm_level; |
|
unsigned long baudclk_rate; |
|
unsigned int min_dma_size; |
|
|
|
unsigned int rx_irq; |
|
unsigned int tx_irq; |
|
|
|
unsigned int tx_in_progress; |
|
unsigned int tx_mode; |
|
unsigned int rx_mode; |
|
|
|
struct s3c24xx_uart_info *info; |
|
struct clk *clk; |
|
struct clk *baudclk; |
|
struct uart_port port; |
|
struct s3c24xx_serial_drv_data *drv_data; |
|
|
|
/* reference to platform data */ |
|
struct s3c2410_uartcfg *cfg; |
|
|
|
struct s3c24xx_uart_dma *dma; |
|
|
|
#ifdef CONFIG_CPU_FREQ |
|
struct notifier_block freq_transition; |
|
#endif |
|
}; |
|
|
|
/* conversion functions */ |
|
|
|
#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev) |
|
|
|
/* register access controls */ |
|
|
|
#define portaddr(port, reg) ((port)->membase + (reg)) |
|
#define portaddrl(port, reg) \ |
|
((unsigned long *)(unsigned long)((port)->membase + (reg))) |
|
|
|
#define rd_regb(port, reg) (__raw_readb(portaddr(port, reg))) |
|
#define rd_regl(port, reg) (__raw_readl(portaddr(port, reg))) |
|
|
|
#define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg)) |
|
#define wr_regl(port, reg, val) __raw_writel(val, portaddr(port, reg)) |
|
|
|
#endif
|
|
|