de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * CDDL HEADER START
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * The contents of this file are subject to the terms of the
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Common Development and Distribution License (the "License").
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * You may not use this file except in compliance with the License.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * or http://www.opensolaris.org/os/licensing.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * See the License for the specific language governing permissions
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * and limitations under the License.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * When distributing Covered Code, include this CDDL HEADER in each
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * If applicable, add the following below this CDDL HEADER, with the
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * fields enclosed by brackets "[]" replaced with your own identifying
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * information: Portions Copyright [yyyy] [name of copyright owner]
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * CDDL HEADER END
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Use is subject to license terms.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#ifndef _USBSER_USBFTDI_UFTDI_REG_H
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define _USBSER_USBFTDI_UFTDI_REG_H
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * $NetBSD: uftdireg.h,v 1.6 2002/07/11 21:14:28 augustss Exp $
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * $FreeBSD: src/sys/dev/usb/uftdireg.h,v 1.2 2004/07/01 17:16:20 brooks Exp $
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Definitions for the FTDI USB Single Port Serial Converter -
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * known as FTDI_SIO (Serial Input/Output application of the chipset)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Thanx to FTDI (http://www.ftdi.co.uk) for so kindly providing details
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * of the protocol required to talk to the device and ongoing assistence
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * during development.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Bill Ryder - bryder@sgi.com of Silicon Graphics, Inc. is the original
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * author of this file.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* Modified by Lennart Augustsson */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#ifdef __cplusplus
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marslandextern "C" {
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#endif
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* Vendor Request Interface */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RESET 0 /* Reset the port */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_GET_STATUS 5 /* Retrieve current value of status reg */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* Port Identifier Table */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_PIT_DEFAULT 0 /* SIOA */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_PIT_SIOA 1 /* SIOA */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_PIT_SIOB 2 /* SIOB */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_PIT_PARALLEL 3 /* Parallel */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marslandenum uftdi_type {
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland UFTDI_TYPE_SIO,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland UFTDI_TYPE_8U232AM
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland};
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000B
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_RESET
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: Control Value
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = Reset SIO
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = Purge RX buffer
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 2 = Purge TX buffer
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * The Reset SIO command has this effect:
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Sets flow control set to 'none'
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Event char = 0x0d
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Event trigger = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Purge RX buffer
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Purge TX buffer
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Clear DTR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Clear RTS
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * baud and data format not reset
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * The Purge RX and TX buffer commands affect nothing except the buffers
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* FTDI_SIO_RESET */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RESET_SIO 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RESET_PURGE_RX 1
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RESET_PURGE_TX 2
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000B
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_SET_BAUDRATE
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: BaudRate value - see below
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* FTDI_SIO_SET_BAUDRATE */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marslandenum {
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b300 = 0,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b600 = 1,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b1200 = 2,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b2400 = 3,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b4800 = 4,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b9600 = 5,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b19200 = 6,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b38400 = 7,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b57600 = 8,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_sio_b115200 = 9
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland};
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marslandenum {
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b300 = 0x2710,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b600 = 0x1388,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b1200 = 0x09c4,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b2400 = 0x04e2,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b4800 = 0x0271,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b9600 = 0x4138,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b19200 = 0x809c,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b38400 = 0xc04e,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b57600 = 0x0034,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b115200 = 0x001a,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b230400 = 0x000d,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b460800 = 0x4006,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b921600 = 0x8003,
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b2000000 = 0x0001, /* special case for 2M baud */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland ftdi_8u232am_b3000000 = 0x0000, /* special case for 3M baud */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland};
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000B
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_SET_DATA
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: Data characteristics (see below)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: No
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data characteristics
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..7 Number of data bits
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B8..10 Parity
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = Odd
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 2 = Even
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 3 = Mark
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 4 = Space
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B11..13 Stop Bits
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = 1
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = 1.5
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 2 = 2
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B14..15 Reserved
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* FTDI_SIO_SET_DATA */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_BITS(n) (n)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_BITS_MASK 0xff
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_SHIFT 8
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_MASK 0x7
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_STOP_BITS_SHIFT 11
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_STOP_BITS_MASK 0x3
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_BREAK (0x1 << 14)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000B
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_MODEM_CTRL
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: ControlValue (see below)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * NOTE: If the device is in RTS/CTS flow control, the RTS set by this
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * command will be IGNORED without an error being returned
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Also - you can not set DTR and RTS with one control message
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * ControlValue
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0 DTR state
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = reset
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = set
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B1 RTS state
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = reset
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = set
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B2..7 Reserved
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B8 DTR state enable
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = ignore
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = use DTR state
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B9 RTS state enable
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = ignore
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = use RTS state
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B10..15 Reserved
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* FTDI_SIO_MODEM_CTRL */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DTR_MASK 0x1
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DTR_HIGH (1 | (FTDI_SIO_SET_DTR_MASK << 8))
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_DTR_LOW (0 | (FTDI_SIO_SET_DTR_MASK << 8))
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_RTS_MASK 0x2
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_RTS_HIGH (2 | (FTDI_SIO_SET_RTS_MASK << 8))
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_SET_RTS_LOW (0 | (FTDI_SIO_SET_RTS_MASK << 8))
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000b
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_SET_FLOW_CTRL
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: Xoff/Xon
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Protocol/Port - hIndex is protocl / lIndex is port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * hIndex protocol is:
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0 Output handshaking using RTS/CTS
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = enabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B1 Output handshaking using DTR/DSR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = enabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B2 Xon/Xoff handshaking
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = enabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * A value of zero in the hIndex field disables handshaking
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * If Xon/Xoff handshaking is specified, the hValue field should contain the
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * XOFF character and the lValue field contains the XON character.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/* FTDI_SIO_SET_FLOW_CTRL */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_DISABLE_FLOW_CTRL 0x0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RTS_CTS_HS 0x1
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_DTR_DSR_HS 0x2
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_XON_XOFF_HS 0x4
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000b
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_SET_EVENT_CHAR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: Event Char
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue:
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..7 Event Character
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B8 Event Character Processing
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = enabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B9..15 Reserved
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * FTDI_SIO_SET_EVENT_CHAR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Set the special event character for the specified communications port.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * If the device sees this character it will immediately return the
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * data read so far - rather than wait 40ms or until 62 bytes are read
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * which is what normally happens.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 0100 0000b
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_SET_ERROR_CHAR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: Error Char
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: None
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Error Char
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..7 Error Character
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B8 Error Character Processing
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = disabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = enabled
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B9..15 Reserved
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * FTDI_SIO_SET_ERROR_CHAR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Set the parity error replacement character for the specified communications
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * port.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * BmRequestType: 1100 0000b
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * bRequest: FTDI_SIO_GET_MODEM_STATUS
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wValue: zero
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wIndex: Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * wLength: 1
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Data: Status
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * One byte of data is returned
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..3 0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B4 CTS
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = inactive
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = active
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B5 DSR
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = inactive
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = active
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B6 Ring Indicator (RI)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = inactive
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = active
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B7 Receive Line Signal Detect (RLSD)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 0 = inactive
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * 1 = active
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * FTDI_SIO_GET_MODEM_STATUS
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Retrieve the current value of the modem status register.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_CTS_MASK 0x10
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_DSR_MASK 0x20
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RI_MASK 0x40
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_SIO_RLSD_MASK 0x80
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland/*
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * DATA FORMAT
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * IN Endpoint
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * The device reserves the first two bytes of data on this endpoint to contain
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * the current values of the modem and line status registers. In the absence of
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * data, the device generates a message consisting of these two status bytes
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * every 40 ms.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Byte 0: Modem Status
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * NOTE: 4 upper bits have same layout as the MSR register in a 16550
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Offset Description
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..3 Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B4 Clear to Send (CTS)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B5 Data Set Ready (DSR)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B6 Ring Indicator (RI)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B7 Receive Line Signal Detect (RLSD)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Byte 1: Line Status
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * NOTE: same layout as the LSR register in a 16550
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Offset Description
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0 Data Ready (DR)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B1 Overrun Error (OE)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B2 Parity Error (PE)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B3 Framing Error (FE)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B4 Break Interrupt (BI)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B5 Transmitter Holding Register (THRE)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B6 Transmitter Empty (TEMT)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B7 Error in RCVR FIFO
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * OUT Endpoint
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * This device reserves the first bytes of data on this endpoint contain the
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * length and port identifier of the message. For the FTDI USB Serial converter
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * the port identifier is always 1.
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Byte 0: Port & length
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * Offset Description
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B0..1 Port
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland * B2..7 Length of message - (not including Byte 0)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland *
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_PORT_MASK 0x0f
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_MSR_MASK 0xf0
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_GET_MSR(p) (((p)[0]) & FTDI_MSR_MASK)
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_GET_LSR(p) ((p)[1])
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_MASK (~0x60) /* interesting rx bits */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_MSR_STATUS_CTS 0x10
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_MSR_STATUS_DSR 0x20
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_MSR_STATUS_RI 0x40
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_MSR_STATUS_RLSD 0x80 /* aka Carrier Detect */
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_OE 0x02 /* overrun */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_PE 0x04 /* parity */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_FE 0x08 /* framing */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_BI 0x10 /* break */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_THRE 0x20 /* tx hold register is now empty */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland#define FTDI_LSR_STATUS_TEMT 0x40 /* tx shift register is now empty */
4634c44f9aff3ceaf027e46cee4258d7ab23b40fTim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#define FTDI_OUT_TAG(len, port) (((len) << 2) | (port))
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#ifdef __cplusplus
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland}
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#endif
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland
de81e71e031139a0a7f13b7bf64152c3faa76698Tim Marsland#endif /* _USBSER_USBFTDI_UFTDI_REG_H */