Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 /*
0003  * USB ConnectTech WhiteHEAT driver
0004  *
0005  *      Copyright (C) 2002
0006  *          Connect Tech Inc.
0007  *
0008  *      Copyright (C) 1999, 2000
0009  *          Greg Kroah-Hartman (greg@kroah.com)
0010  *
0011  * See Documentation/usb/usb-serial.rst for more information on using this
0012  * driver
0013  *
0014  */
0015 
0016 #ifndef __LINUX_USB_SERIAL_WHITEHEAT_H
0017 #define __LINUX_USB_SERIAL_WHITEHEAT_H
0018 
0019 
0020 /* WhiteHEAT commands */
0021 #define WHITEHEAT_OPEN          1   /* open the port */
0022 #define WHITEHEAT_CLOSE         2   /* close the port */
0023 #define WHITEHEAT_SETUP_PORT        3   /* change port settings */
0024 #define WHITEHEAT_SET_RTS       4   /* turn RTS on or off */
0025 #define WHITEHEAT_SET_DTR       5   /* turn DTR on or off */
0026 #define WHITEHEAT_SET_BREAK     6   /* turn BREAK on or off */
0027 #define WHITEHEAT_DUMP          7   /* dump memory */
0028 #define WHITEHEAT_STATUS        8   /* get status */
0029 #define WHITEHEAT_PURGE         9   /* clear the UART fifos */
0030 #define WHITEHEAT_GET_DTR_RTS       10  /* get the state of DTR and RTS
0031                             for a port */
0032 #define WHITEHEAT_GET_HW_INFO       11  /* get EEPROM info and
0033                             hardware ID */
0034 #define WHITEHEAT_REPORT_TX_DONE    12  /* get the next TX done */
0035 #define WHITEHEAT_EVENT         13  /* unsolicited status events */
0036 #define WHITEHEAT_ECHO          14  /* send data to the indicated
0037                            IN endpoint */
0038 #define WHITEHEAT_DO_TEST       15  /* perform specified test */
0039 #define WHITEHEAT_CMD_COMPLETE      16  /* reply for some commands */
0040 #define WHITEHEAT_CMD_FAILURE       17  /* reply for failed commands */
0041 
0042 
0043 /*
0044  * Commands to the firmware
0045  */
0046 
0047 
0048 /*
0049  * WHITEHEAT_OPEN
0050  * WHITEHEAT_CLOSE
0051  * WHITEHEAT_STATUS
0052  * WHITEHEAT_GET_DTR_RTS
0053  * WHITEHEAT_REPORT_TX_DONE
0054 */
0055 struct whiteheat_simple {
0056     __u8    port;   /* port number (1 to N) */
0057 };
0058 
0059 
0060 /*
0061  * WHITEHEAT_SETUP_PORT
0062  */
0063 #define WHITEHEAT_PAR_NONE  'n' /* no parity */
0064 #define WHITEHEAT_PAR_EVEN  'e' /* even parity */
0065 #define WHITEHEAT_PAR_ODD   'o' /* odd parity */
0066 #define WHITEHEAT_PAR_SPACE '0' /* space (force 0) parity */
0067 #define WHITEHEAT_PAR_MARK  '1' /* mark (force 1) parity */
0068 
0069 #define WHITEHEAT_SFLOW_NONE    'n' /* no software flow control */
0070 #define WHITEHEAT_SFLOW_RX  'r' /* XOFF/ON is sent when RX
0071                        fills/empties */
0072 #define WHITEHEAT_SFLOW_TX  't' /* when received XOFF/ON will
0073                        stop/start TX */
0074 #define WHITEHEAT_SFLOW_RXTX    'b' /* both SFLOW_RX and SFLOW_TX */
0075 
0076 #define WHITEHEAT_HFLOW_NONE        0x00    /* no hardware flow control */
0077 #define WHITEHEAT_HFLOW_RTS_TOGGLE  0x01    /* RTS is on during transmit,
0078                            off otherwise */
0079 #define WHITEHEAT_HFLOW_DTR     0x02    /* DTR is off/on when RX
0080                            fills/empties */
0081 #define WHITEHEAT_HFLOW_CTS     0x08    /* when received CTS off/on
0082                            will stop/start TX */
0083 #define WHITEHEAT_HFLOW_DSR     0x10    /* when received DSR off/on
0084                            will stop/start TX */
0085 #define WHITEHEAT_HFLOW_RTS     0x80    /* RTS is off/on when RX
0086                            fills/empties */
0087 
0088 struct whiteheat_port_settings {
0089     __u8    port;       /* port number (1 to N) */
0090     __le32  baud;       /* any value 7 - 460800, firmware calculates
0091                    best fit; arrives little endian */
0092     __u8    bits;       /* 5, 6, 7, or 8 */
0093     __u8    stop;       /* 1 or 2, default 1 (2 = 1.5 if bits = 5) */
0094     __u8    parity;     /* see WHITEHEAT_PAR_* above */
0095     __u8    sflow;      /* see WHITEHEAT_SFLOW_* above */
0096     __u8    xoff;       /* XOFF byte value */
0097     __u8    xon;        /* XON byte value */
0098     __u8    hflow;      /* see WHITEHEAT_HFLOW_* above */
0099     __u8    lloop;      /* 0/1 turns local loopback mode off/on */
0100 } __attribute__ ((packed));
0101 
0102 
0103 /*
0104  * WHITEHEAT_SET_RTS
0105  * WHITEHEAT_SET_DTR
0106  * WHITEHEAT_SET_BREAK
0107  */
0108 #define WHITEHEAT_RTS_OFF   0x00
0109 #define WHITEHEAT_RTS_ON    0x01
0110 #define WHITEHEAT_DTR_OFF   0x00
0111 #define WHITEHEAT_DTR_ON    0x01
0112 #define WHITEHEAT_BREAK_OFF 0x00
0113 #define WHITEHEAT_BREAK_ON  0x01
0114 
0115 struct whiteheat_set_rdb {
0116     __u8    port;       /* port number (1 to N) */
0117     __u8    state;      /* 0/1 turns signal off/on */
0118 };
0119 
0120 
0121 /*
0122  * WHITEHEAT_DUMP
0123  */
0124 #define WHITEHEAT_DUMP_MEM_DATA     'd'  /* data */
0125 #define WHITEHEAT_DUMP_MEM_IDATA    'i'  /* idata */
0126 #define WHITEHEAT_DUMP_MEM_BDATA    'b'  /* bdata */
0127 #define WHITEHEAT_DUMP_MEM_XDATA    'x'  /* xdata */
0128 
0129 /*
0130  * Allowable address ranges (firmware checks address):
0131  * Type DATA:  0x00 - 0xff
0132  * Type IDATA: 0x80 - 0xff
0133  * Type BDATA: 0x20 - 0x2f
0134  * Type XDATA: 0x0000 - 0xffff
0135  *
0136  * B/I/DATA all read the local memory space
0137  * XDATA reads the external memory space
0138  * BDATA returns bits as bytes
0139  *
0140  * NOTE: 0x80 - 0xff (local space) are the Special Function Registers
0141  *       of the 8051, and some have on-read side-effects.
0142  */
0143 
0144 struct whiteheat_dump {
0145     __u8    mem_type;   /* see WHITEHEAT_DUMP_* above */
0146     __u16   addr;       /* address, see restrictions above */
0147     __u16   length;     /* number of bytes to dump, max 63 bytes */
0148 };
0149 
0150 
0151 /*
0152  * WHITEHEAT_PURGE
0153  */
0154 #define WHITEHEAT_PURGE_RX  0x01    /* purge rx fifos */
0155 #define WHITEHEAT_PURGE_TX  0x02    /* purge tx fifos */
0156 
0157 struct whiteheat_purge {
0158     __u8    port;       /* port number (1 to N) */
0159     __u8    what;       /* bit pattern of what to purge */
0160 };
0161 
0162 
0163 /*
0164  * WHITEHEAT_ECHO
0165  */
0166 struct whiteheat_echo {
0167     __u8    port;       /* port number (1 to N) */
0168     __u8    length;     /* length of message to echo, max 61 bytes */
0169     __u8    echo_data[61];  /* data to echo */
0170 };
0171 
0172 
0173 /*
0174  * WHITEHEAT_DO_TEST
0175  */
0176 #define WHITEHEAT_TEST_UART_RW      0x01  /* read/write uart registers */
0177 #define WHITEHEAT_TEST_UART_INTR    0x02  /* uart interrupt */
0178 #define WHITEHEAT_TEST_SETUP_CONT   0x03  /* setup for
0179                         PORT_CONT/PORT_DISCONT */
0180 #define WHITEHEAT_TEST_PORT_CONT    0x04  /* port connect */
0181 #define WHITEHEAT_TEST_PORT_DISCONT 0x05  /* port disconnect */
0182 #define WHITEHEAT_TEST_UART_CLK_START   0x06  /* uart clock test start */
0183 #define WHITEHEAT_TEST_UART_CLK_STOP    0x07  /* uart clock test stop */
0184 #define WHITEHEAT_TEST_MODEM_FT     0x08  /* modem signals, requires a
0185                         loopback cable/connector */
0186 #define WHITEHEAT_TEST_ERASE_EEPROM 0x09  /* erase eeprom */
0187 #define WHITEHEAT_TEST_READ_EEPROM  0x0a  /* read eeprom */
0188 #define WHITEHEAT_TEST_PROGRAM_EEPROM   0x0b  /* program eeprom */
0189 
0190 struct whiteheat_test {
0191     __u8    port;       /* port number (1 to n) */
0192     __u8    test;       /* see WHITEHEAT_TEST_* above*/
0193     __u8    info[32];   /* additional info */
0194 };
0195 
0196 
0197 /*
0198  * Replies from the firmware
0199  */
0200 
0201 
0202 /*
0203  * WHITEHEAT_STATUS
0204  */
0205 #define WHITEHEAT_EVENT_MODEM       0x01    /* modem field is valid */
0206 #define WHITEHEAT_EVENT_ERROR       0x02    /* error field is valid */
0207 #define WHITEHEAT_EVENT_FLOW        0x04    /* flow field is valid */
0208 #define WHITEHEAT_EVENT_CONNECT     0x08    /* connect field is valid */
0209 
0210 #define WHITEHEAT_FLOW_NONE     0x00    /* no flow control active */
0211 #define WHITEHEAT_FLOW_HARD_OUT     0x01    /* TX is stopped by CTS
0212                           (waiting for CTS to go on) */
0213 #define WHITEHEAT_FLOW_HARD_IN      0x02    /* remote TX is stopped
0214                           by RTS */
0215 #define WHITEHEAT_FLOW_SOFT_OUT     0x04    /* TX is stopped by XOFF
0216                           received (waiting for XON) */
0217 #define WHITEHEAT_FLOW_SOFT_IN      0x08    /* remote TX is stopped by XOFF
0218                           transmitted */
0219 #define WHITEHEAT_FLOW_TX_DONE      0x80    /* TX has completed */
0220 
0221 struct whiteheat_status_info {
0222     __u8    port;       /* port number (1 to N) */
0223     __u8    event;      /* indicates what the current event is,
0224                     see WHITEHEAT_EVENT_* above */
0225     __u8    modem;      /* modem signal status (copy of uart's
0226                     MSR register) */
0227     __u8    error;      /* line status (copy of uart's LSR register) */
0228     __u8    flow;       /* flow control state, see WHITEHEAT_FLOW_*
0229                     above */
0230     __u8    connect;    /* 0 means not connected, non-zero means
0231                     connected */
0232 };
0233 
0234 
0235 /*
0236  * WHITEHEAT_GET_DTR_RTS
0237  */
0238 struct whiteheat_dr_info {
0239     __u8    mcr;        /* copy of uart's MCR register */
0240 };
0241 
0242 
0243 /*
0244  * WHITEHEAT_GET_HW_INFO
0245  */
0246 struct whiteheat_hw_info {
0247     __u8    hw_id;      /* hardware id number, WhiteHEAT = 0 */
0248     __u8    sw_major_rev;   /* major version number */
0249     __u8    sw_minor_rev;   /* minor version number */
0250     struct whiteheat_hw_eeprom_info {
0251         __u8    b0;         /* B0 */
0252         __u8    vendor_id_low;      /* vendor id (low byte) */
0253         __u8    vendor_id_high;     /* vendor id (high byte) */
0254         __u8    product_id_low;     /* product id (low byte) */
0255         __u8    product_id_high;    /* product id (high byte) */
0256         __u8    device_id_low;      /* device id (low byte) */
0257         __u8    device_id_high;     /* device id (high byte) */
0258         __u8    not_used_1;
0259         __u8    serial_number_0;    /* serial number (low byte) */
0260         __u8    serial_number_1;    /* serial number */
0261         __u8    serial_number_2;    /* serial number */
0262         __u8    serial_number_3;    /* serial number (high byte) */
0263         __u8    not_used_2;
0264         __u8    not_used_3;
0265         __u8    checksum_low;       /* checksum (low byte) */
0266         __u8    checksum_high;      /* checksum (high byte */
0267     } hw_eeprom_info;   /* EEPROM contents */
0268 };
0269 
0270 
0271 /*
0272  * WHITEHEAT_EVENT
0273  */
0274 struct whiteheat_event_info {
0275     __u8    port;       /* port number (1 to N) */
0276     __u8    event;      /* see whiteheat_status_info.event */
0277     __u8    info;       /* see whiteheat_status_info.modem, .error,
0278                     .flow, .connect */
0279 };
0280 
0281 
0282 /*
0283  * WHITEHEAT_DO_TEST
0284  */
0285 #define WHITEHEAT_TEST_FAIL 0x00  /* test failed */
0286 #define WHITEHEAT_TEST_UNKNOWN  0x01  /* unknown test requested */
0287 #define WHITEHEAT_TEST_PASS 0xff  /* test passed */
0288 
0289 struct whiteheat_test_info {
0290     __u8    port;       /* port number (1 to N) */
0291     __u8    test;       /* indicates which test this is a response for,
0292                    see WHITEHEAT_DO_TEST above */
0293     __u8    status;     /* see WHITEHEAT_TEST_* above */
0294     __u8    results[32];    /* test-dependent results */
0295 };
0296 
0297 
0298 #endif