diff options
Diffstat (limited to 'sys/dev/usb/uslhcomreg.h')
-rw-r--r-- | sys/dev/usb/uslhcomreg.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/sys/dev/usb/uslhcomreg.h b/sys/dev/usb/uslhcomreg.h new file mode 100644 index 00000000000..286cde277e7 --- /dev/null +++ b/sys/dev/usb/uslhcomreg.h @@ -0,0 +1,103 @@ +/* $OpenBSD: */ + +/* + * Copyright (c) 2015 SASANO Takayoshi <uaa@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#define USLHCOM_TX_HEADER_SIZE sizeof(u_char) + +#define SET_TRANSMIT_DATA(x) (x) +#define GET_RECEIVE_DATA(x) (x) + +#define SET_DEVICE_RESET 0x40 +#define GET_SET_UART_ENABLE 0x41 +#define GET_UART_STATUS 0x42 +#define SET_CLEAR_FIFOS 0x43 +#define GET_GPIO_STATE 0x44 +#define SET_GPIO_STATE 0x45 +#define GET_VERSION 0x46 +#define GET_SET_OTP_LOCK_BYTE 0x47 + +#define GET_SET_UART_CONFIG 0x50 +#define SET_TRANSMIT_LINE_BREAK 0x51 +#define SET_STOP_LINE_BREAK 0x52 + + +/* SET_DEVICE_RESET */ +#define DEVICE_RESET_VALUE 0x00 + +/* GET_SET_UART_ENABLE */ +#define UART_DISABLE 0x00 +#define UART_ENABLE 0x01 + +/* GET_UART_STATUS */ +struct uslhcom_uart_status { + u_char tx_fifo[2]; /* (big endian) */ + u_char rx_fifo[2]; /* (big endian) */ + u_char error_status; + u_char break_status; +} __packed; + +#define ERROR_STATUS_PARITY 0x01 +#define ERROR_STATUS_OVERRUN 0x02 +#define BREAK_STATUS 0x01 + +/* SET_CLEAR_FIFO */ +#define CLEAR_TX_FIFO 0x01 +#define CLEAR_RX_FIFO 0x02 + +/* GET_VERSION */ +struct uslhcom_version_info { + u_char product_id; + u_char product_revision; +} __packed; + +/* GET_SET_UART_CONFIG */ +struct uslhcom_uart_config { + u_char baud_rate[4]; /* (big endian) */ + u_char parity; + u_char data_control; + u_char data_bits; + u_char stop_bits; +} __packed; + +/* + * Silicon Labs CP2110/4 Application Note (AN434) Rev 0.4 says that + * valid baud rate is 300bps to 500,000bps. + * But HidUartSample of CP2110 SDK accepts 50bps to 2,000,000bps. + */ +#define UART_CONFIG_BAUD_RATE_MIN 50 +#define UART_CONFIG_BAUD_RATE_MAX 2000000 + +#define UART_CONFIG_PARITY_NONE 0x00 +#define UART_CONFIG_PARITY_EVEN 0x01 +#define UART_CONFIG_PARITY_ODD 0x02 +#define UART_CONFIG_PARITY_MARK 0x03 +#define UART_CONFIG_PARITY_SPACE 0x04 + +#define UART_CONFIG_DATA_CONTROL_NONE 0x00 +#define UART_CONFIG_DATA_CONTROL_HARD 0x01 + +/* + * AN434 Rev 0.4 describes setting 0x05 ... 0x08 to configure data bits. + * But actually it requires different values. + */ +#define UART_CONFIG_DATA_BITS_5 0x00 +#define UART_CONFIG_DATA_BITS_6 0x01 +#define UART_CONFIG_DATA_BITS_7 0x02 +#define UART_CONFIG_DATA_BITS_8 0x03 + +#define UART_CONFIG_STOP_BITS_1 0x00 +#define UART_CONFIG_STOP_BITS_2 0x01 |