61a6976bf1
This takes a bit of a sledgehammer to the horribly CPU subtype ifdef-ridden header and abstracts all of the different register layouts in to distinct types which in turn can be overriden on a per-port basis, or permitted to default to the map matching the port type at probe time. In the process this ultimately fixes up inumerable bugs with mismatches on various CPU types (particularly the legacy ones that were obviously broken years ago and no one noticed) and provides a more tightly coupled and consolidated platform for extending and implementing generic features. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
59 lines
2.2 KiB
C
59 lines
2.2 KiB
C
#include <linux/serial_core.h>
|
|
#include <linux/io.h>
|
|
#include <linux/gpio.h>
|
|
|
|
#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7720) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7721) || \
|
|
defined(CONFIG_ARCH_SH73A0) || \
|
|
defined(CONFIG_ARCH_SH7367) || \
|
|
defined(CONFIG_ARCH_SH7377) || \
|
|
defined(CONFIG_ARCH_SH7372)
|
|
# define SCIF_RFDC_MASK 0x007f
|
|
# define SCIF_TXROOM_MAX 64
|
|
#elif defined(CONFIG_CPU_SUBTYPE_SH7763)
|
|
# define SCIF_RFDC_MASK 0x007f
|
|
# define SCIF_TXROOM_MAX 64
|
|
/* SH7763 SCIF2 support */
|
|
# define SCIF2_RFDC_MASK 0x001f
|
|
# define SCIF2_TXROOM_MAX 16
|
|
#else
|
|
# define SCIF_RFDC_MASK 0x001f
|
|
# define SCIF_TXROOM_MAX 16
|
|
#endif
|
|
|
|
#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
|
|
#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_RDF)
|
|
#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
|
|
#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
|
|
#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
|
|
#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
|
|
|
|
#define SCxSR_ERRORS(port) (to_sci_port(port)->cfg->error_mask)
|
|
|
|
#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7720) || \
|
|
defined(CONFIG_CPU_SUBTYPE_SH7721) || \
|
|
defined(CONFIG_ARCH_SH73A0) || \
|
|
defined(CONFIG_ARCH_SH7367) || \
|
|
defined(CONFIG_ARCH_SH7377) || \
|
|
defined(CONFIG_ARCH_SH7372)
|
|
# define SCxSR_RDxF_CLEAR(port) (sci_in(port, SCxSR) & 0xfffc)
|
|
# define SCxSR_ERROR_CLEAR(port) (sci_in(port, SCxSR) & 0xfd73)
|
|
# define SCxSR_TDxE_CLEAR(port) (sci_in(port, SCxSR) & 0xffdf)
|
|
# define SCxSR_BREAK_CLEAR(port) (sci_in(port, SCxSR) & 0xffe3)
|
|
#else
|
|
# define SCxSR_RDxF_CLEAR(port) (((port)->type == PORT_SCI) ? 0xbc : 0x00fc)
|
|
# define SCxSR_ERROR_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x0073)
|
|
# define SCxSR_TDxE_CLEAR(port) (((port)->type == PORT_SCI) ? 0x78 : 0x00df)
|
|
# define SCxSR_BREAK_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x00e3)
|
|
#endif
|
|
|
|
/* SCFCR */
|
|
#define SCFCR_RFRST 0x0002
|
|
#define SCFCR_TFRST 0x0004
|
|
#define SCFCR_MCE 0x0008
|
|
|
|
#define SCI_MAJOR 204
|
|
#define SCI_MINOR_START 8
|