usa90msg.h revision 60b08185ce63023f22fd6b2ed0db8c0d119b2023
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_USB_USBSER_KEYSPAN_USA90MSG_H
#define _SYS_USB_USBSER_KEYSPAN_USA90MSG_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct keyspan_usa19hs_port_ctrl_msg keyspan_usa19hs_port_ctrl_msg_t;
typedef struct keyspan_usa19hs_port_status_msg
keyspan_usa19hs_port_status_msg_t;
/*
* usa90msg.h
*
* Copyright (c) 1998-2003 InnoSys Incorporated. All Rights Reserved
* This file is available under a BSD-style copyright
*
* Keyspan USB Async Firmware to run on xxxxx
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain this licence text
* without modification, this list of conditions, and the following
* disclaimer. The following copyright notice must appear immediately at
* the beginning of all source files:
*
* Copyright (c) 1998-2000 InnoSys Incorporated. All Rights Reserved
*
* This file is available under a BSD-style copyright
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. The name of InnoSys Incorprated may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY INNOSYS CORP. ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Revisions:
*
* 2003feb14 add setTxMode/txMode and cancelRxXoff to portControl
*
*/
struct keyspan_usa19hs_port_ctrl_msg {
/*
* there are three types of "commands" sent in the control message:
*
* configuration changes which must be requested by setting
* the corresponding "set" flag (and should only be requested
* when necessary, to reduce overhead on the device):
*/
uint8_t setClocking; /* host requests baud rate be set */
uint8_t baudLo; /* host does baud divisor calculation */
uint8_t baudHi; /* host does baud divisor calculation */
uint8_t setLcr; /* host requests lcr be set */
uint8_t lcr; /* use PARITY, STOPBITS, DATABITS below */
uint8_t setRxMode; /* set receive mode */
uint8_t rxMode; /* RXMODE_DMA or RXMODE_BYHAND */
uint8_t setTxMode; /* set transmit mode */
uint8_t txMode; /* TXMODE_DMA or TXMODE_BYHAND */
/* host requests tx flow control be set */
uint8_t setTxFlowControl;
uint8_t txFlowControl; /* use TX_FLOW... bits below */
/* host requests rx flow control be set */
uint8_t setRxFlowControl;
uint8_t rxFlowControl; /* use RX_FLOW... bits below */
uint8_t sendXoff; /* host requests XOFF transmitted immediately */
uint8_t sendXon; /* host requests XON char transmitted */
uint8_t xonChar; /* specified in current character format */
uint8_t xoffChar; /* specified in current character format */
uint8_t sendChar; /* host requests char transmitted immediately */
uint8_t txChar; /* character to send */
uint8_t setRts; /* host requests RTS output be set */
uint8_t rts; /* 1=on, 0=off */
uint8_t setDtr; /* host requests DTR output be set */
uint8_t dtr; /* 1=on, 0=off */
/*
* configuration data which is simply used as is
* and must be specified correctly in every host message.
*/
/* forward when this number of chars available */
uint8_t rxForwardingLength;
uint8_t rxForwardingTimeout; /* (1-31 in ms) */
uint8_t txAckSetting; /* 0=don't ack, 1=normal, 2-255 TBD... */
/*
* Firmware states which cause actions if they change
* and must be specified correctly in every host message.
*/
uint8_t portEnabled; /* 0=disabled, 1=enabled */
uint8_t txFlush; /* 0=normal, 1=toss outbound data */
uint8_t txBreak; /* 0=break off, 1=break on */
uint8_t loopbackMode; /* 0=no loopback, 1=loopback enabled */
/*
* commands which are flags only; these are processed in order
* (so that, e.g., if rxFlush and rxForward flags are set, the
* port will have no data to forward); any non-zero value
* is respected
*/
uint8_t rxFlush; /* toss inbound data */
/* forward all inbound data, NOW (as if fwdLen==1) */
uint8_t rxForward;
uint8_t cancelRxXoff; /* cancel any receive XOFF state (_txXoff) */
uint8_t returnStatus; /* return current status NOW */
};
/* defines for bits in lcr */
#define USA_DATABITS_5 0x00
#define USA_DATABITS_6 0x01
#define USA_DATABITS_7 0x02
#define USA_DATABITS_8 0x03
#define STOPBITS_5678_1 0x00 /* 1 stop bit for all byte sizes */
#define STOPBITS_5_1p5 0x04 /* 1.5 stop bits for 5-bit byte */
#define STOPBITS_678_2 0x04 /* 2 stop bits for 6-8 bit byte */
#define USA_PARITY_NONE 0x00
#define USA_PARITY_ODD 0x08
#define USA_PARITY_EVEN 0x18
#define PARITY_MARK_1 0x28 /* force parity MARK */
#define PARITY_SPACE_0 0x38 /* force parity SPACE */
#define TXFLOW_CTS 0x04
#define TXFLOW_DSR 0x08
#define TXFLOW_XOFF 0x01
#define TXFLOW_XOFF_ANY 0x02
#define TXFLOW_XOFF_BITS (TXFLOW_XOFF | TXFLOW_XOFF_ANY)
#define RXFLOW_XOFF 0x10
#define RXFLOW_RTS 0x20
#define RXFLOW_DTR 0x40
#define RXFLOW_DSR_SENSITIVITY 0x80
#define RXMODE_BYHAND 0x00
#define RXMODE_DMA 0x02
#define TXMODE_BYHAND 0x00
#define TXMODE_DMA 0x02
/* all things called "StatusMessage" are sent on the status endpoint */
struct keyspan_usa19hs_port_status_msg {
uint8_t msr; /* reports the actual MSR register */
uint8_t cts; /* reports CTS pin */
uint8_t dcd; /* reports DCD pin */
uint8_t dsr; /* reports DSR pin */
uint8_t ri; /* reports RI pin */
uint8_t _txXoff; /* port is in XOFF state (we received XOFF) */
uint8_t rxBreak; /* reports break state */
/* count of overrun errors (since last reported) */
uint8_t rxOverrun;
/* count of parity errors (since last reported) */
uint8_t rxParity;
/* count of frame errors (since last reported) */
uint8_t rxFrame;
uint8_t portState; /* PORTSTATE_xxx bits (useful for debugging) */
uint8_t messageAck; /* message acknowledgement */
uint8_t charAck; /* character acknowledgement */
/* (value = returnStatus) a control message has been processed */
uint8_t controlResponse;
};
/* bits in RX data message when STAT byte is included */
#define RXERROR_OVERRUN 0x02
#define RXERROR_PARITY 0x04
#define RXERROR_FRAMING 0x08
#define RXERROR_BREAK 0x10
#define PORTSTATE_ENABLED 0x80
#define PORTSTATE_TXFLUSH 0x01
#define PORTSTATE_TXBREAK 0x02
#define PORTSTATE_LOOPBACK 0x04
/* MSR bits */
/* CTS has changed since last report */
#define USA_MSR_dCTS 0x01
#define USA_MSR_dDSR 0x02
#define USA_MSR_dRI 0x04
#define USA_MSR_dDCD 0x08
#define USA_MSR_CTS 0x10 /* current state of CTS */
#define USA_MSR_DSR 0x20
#define USA_USA_MSR_RI 0x40
#define MSR_DCD 0x80
/* ie: the maximum length of an endpoint buffer */
#define MAX_DATA_LEN 64
#ifdef __cplusplus
}
#endif
#endif /* _SYS_USB_USBSER_KEYSPAN_USA90MSG_H */