[BACK]Return to uftdireg.h CVS log [TXT][DIR] Up to [local] / sys / dev / usb

Annotation of sys/dev/usb/uftdireg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: uftdireg.h,v 1.11 2006/06/16 06:28:25 deraadt Exp $   */
                      2: /*     $NetBSD: uftdireg.h,v 1.6 2002/07/11 21:14:28 augustss Exp $ */
                      3:
                      4: /*
                      5:  * Definitions for the FTDI USB Single Port Serial Converter -
                      6:  * known as FTDI_SIO (Serial Input/Output application of the chipset)
                      7:  *
                      8:  * The device is based on the FTDI FT8U100AX chip. It has a DB25 on one side,
                      9:  * USB on the other.
                     10:  *
                     11:  * Thanks to FTDI (http://www.ftdi.co.uk) for so kindly providing details
                     12:  * of the protocol required to talk to the device and ongoing assistance
                     13:  * during development.
                     14:  *
                     15:  * Bill Ryder - bryder@sgi.com of Silicon Graphics, Inc. is the original
                     16:  * author of this file.
                     17:  */
                     18: /* Modified by Lennart Augustsson */
                     19:
                     20: /* Vendor Request Interface */
                     21: #define FTDI_SIO_RESET                 0 /* Reset the port */
                     22: #define FTDI_SIO_MODEM_CTRL    1 /* Set the modem control register */
                     23: #define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */
                     24: #define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */
                     25: #define FTDI_SIO_SET_DATA      4 /* Set the data characteristics of the port */
                     26: #define FTDI_SIO_GET_STATUS    5 /* Retrieve current value of status reg */
                     27: #define FTDI_SIO_SET_EVENT_CHAR        6 /* Set the event character */
                     28: #define FTDI_SIO_SET_ERROR_CHAR        7 /* Set the error character */
                     29:
                     30: /* Port Identifier Table */
                     31: #define FTDI_PIT_DEFAULT       0 /* SIOA */
                     32: #define FTDI_PIT_SIOA          1 /* SIOA */
                     33: #define FTDI_PIT_SIOB          2 /* SIOB */
                     34: #define FTDI_PIT_PARALLEL      3 /* Parallel */
                     35:
                     36: enum uftdi_type {
                     37:        UFTDI_TYPE_SIO,
                     38:        UFTDI_TYPE_8U232AM
                     39: };
                     40:
                     41: /*
                     42:  * BmRequestType:  0100 0000B
                     43:  * bRequest:       FTDI_SIO_RESET
                     44:  * wValue:         Control Value
                     45:  *                   0 = Reset SIO
                     46:  *                   1 = Purge RX buffer
                     47:  *                   2 = Purge TX buffer
                     48:  * wIndex:         Port
                     49:  * wLength:        0
                     50:  * Data:           None
                     51:  *
                     52:  * The Reset SIO command has this effect:
                     53:  *
                     54:  *    Sets flow control set to 'none'
                     55:  *    Event char = 0x0d
                     56:  *    Event trigger = disabled
                     57:  *    Purge RX buffer
                     58:  *    Purge TX buffer
                     59:  *    Clear DTR
                     60:  *    Clear RTS
                     61:  *    baud and data format not reset
                     62:  *
                     63:  * The Purge RX and TX buffer commands affect nothing except the buffers
                     64:  *
                     65:  */
                     66: /* FTDI_SIO_RESET */
                     67: #define FTDI_SIO_RESET_SIO 0
                     68: #define FTDI_SIO_RESET_PURGE_RX 1
                     69: #define FTDI_SIO_RESET_PURGE_TX 2
                     70:
                     71:
                     72: /*
                     73:  * BmRequestType:  0100 0000B
                     74:  * bRequest:       FTDI_SIO_SET_BAUDRATE
                     75:  * wValue:         BaudRate value - see below
                     76:  * wIndex:         Port
                     77:  * wLength:        0
                     78:  * Data:           None
                     79:  */
                     80: /* FTDI_SIO_SET_BAUDRATE */
                     81: enum {
                     82:        ftdi_sio_b300 = 0,
                     83:        ftdi_sio_b600 = 1,
                     84:        ftdi_sio_b1200 = 2,
                     85:        ftdi_sio_b2400 = 3,
                     86:        ftdi_sio_b4800 = 4,
                     87:        ftdi_sio_b9600 = 5,
                     88:        ftdi_sio_b19200 = 6,
                     89:        ftdi_sio_b38400 = 7,
                     90:        ftdi_sio_b57600 = 8,
                     91:        ftdi_sio_b115200 = 9
                     92: };
                     93:
                     94: #define FTDI_8U232AM_FREQ 3000000
                     95:
                     96: /* Bounds for normal divisors as 4-bit fixed precision ints. */
                     97: #define FTDI_8U232AM_MIN_DIV 0x20
                     98: #define FTDI_8U232AM_MAX_DIV 0x3fff8
                     99:
                    100: /*
                    101:  * BmRequestType:  0100 0000B
                    102:  * bRequest:       FTDI_SIO_SET_DATA
                    103:  * wValue:         Data characteristics (see below)
                    104:  * wIndex:         Port
                    105:  * wLength:        0
                    106:  * Data:           No
                    107:  *
                    108:  * Data characteristics
                    109:  *
                    110:  *   B0..7   Number of data bits
                    111:  *   B8..10  Parity
                    112:  *           0 = None
                    113:  *           1 = Odd
                    114:  *           2 = Even
                    115:  *           3 = Mark
                    116:  *           4 = Space
                    117:  *   B11..13 Stop Bits
                    118:  *           0 = 1
                    119:  *           1 = 1.5
                    120:  *           2 = 2
                    121:  *   B14..15 Reserved
                    122:  *
                    123:  */
                    124: /* FTDI_SIO_SET_DATA */
                    125: #define FTDI_SIO_SET_DATA_BITS(n) (n)
                    126: #define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8)
                    127: #define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8)
                    128: #define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8)
                    129: #define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8)
                    130: #define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8)
                    131: #define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11)
                    132: #define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11)
                    133: #define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11)
                    134: #define FTDI_SIO_SET_BREAK (0x1 << 14)
                    135:
                    136:
                    137: /*
                    138:  * BmRequestType:   0100 0000B
                    139:  * bRequest:        FTDI_SIO_MODEM_CTRL
                    140:  * wValue:          ControlValue (see below)
                    141:  * wIndex:          Port
                    142:  * wLength:         0
                    143:  * Data:            None
                    144:  *
                    145:  * NOTE: If the device is in RTS/CTS flow control, the RTS set by this
                    146:  * command will be IGNORED without an error being returned
                    147:  * Also - you can not set DTR and RTS with one control message
                    148:  *
                    149:  * ControlValue
                    150:  * B0    DTR state
                    151:  *          0 = reset
                    152:  *          1 = set
                    153:  * B1    RTS state
                    154:  *          0 = reset
                    155:  *          1 = set
                    156:  * B2..7 Reserved
                    157:  * B8    DTR state enable
                    158:  *          0 = ignore
                    159:  *          1 = use DTR state
                    160:  * B9    RTS state enable
                    161:  *          0 = ignore
                    162:  *          1 = use RTS state
                    163:  * B10..15 Reserved
                    164:  */
                    165: /* FTDI_SIO_MODEM_CTRL */
                    166: #define FTDI_SIO_SET_DTR_MASK 0x1
                    167: #define FTDI_SIO_SET_DTR_HIGH (1 | ( FTDI_SIO_SET_DTR_MASK  << 8))
                    168: #define FTDI_SIO_SET_DTR_LOW  (0 | ( FTDI_SIO_SET_DTR_MASK  << 8))
                    169: #define FTDI_SIO_SET_RTS_MASK 0x2
                    170: #define FTDI_SIO_SET_RTS_HIGH (2 | ( FTDI_SIO_SET_RTS_MASK << 8))
                    171: #define FTDI_SIO_SET_RTS_LOW (0 | ( FTDI_SIO_SET_RTS_MASK << 8))
                    172:
                    173:
                    174: /*
                    175:  *   BmRequestType:  0100 0000b
                    176:  *   bRequest:       FTDI_SIO_SET_FLOW_CTRL
                    177:  *   wValue:         Xoff/Xon
                    178:  *   wIndex:         Protocol/Port - hIndex is protocol / lIndex is port
                    179:  *   wLength:        0
                    180:  *   Data:           None
                    181:  *
                    182:  * hIndex protocol is:
                    183:  *   B0 Output handshaking using RTS/CTS
                    184:  *       0 = disabled
                    185:  *       1 = enabled
                    186:  *   B1 Output handshaking using DTR/DSR
                    187:  *       0 = disabled
                    188:  *       1 = enabled
                    189:  *   B2 Xon/Xoff handshaking
                    190:  *       0 = disabled
                    191:  *       1 = enabled
                    192:  *
                    193:  * A value of zero in the hIndex field disables handshaking
                    194:  *
                    195:  * If Xon/Xoff handshaking is specified, the hValue field should contain the
                    196:  * XOFF character and the lValue field contains the XON character.
                    197:  */
                    198: /* FTDI_SIO_SET_FLOW_CTRL */
                    199: #define FTDI_SIO_DISABLE_FLOW_CTRL 0x0
                    200: #define FTDI_SIO_RTS_CTS_HS 0x1
                    201: #define FTDI_SIO_DTR_DSR_HS 0x2
                    202: #define FTDI_SIO_XON_XOFF_HS 0x4
                    203:
                    204:
                    205: /*
                    206:  *  BmRequestType:   0100 0000b
                    207:  *  bRequest:        FTDI_SIO_SET_EVENT_CHAR
                    208:  *  wValue:          Event Char
                    209:  *  wIndex:          Port
                    210:  *  wLength:         0
                    211:  *  Data:            None
                    212:  *
                    213:  * wValue:
                    214:  *   B0..7   Event Character
                    215:  *   B8      Event Character Processing
                    216:  *             0 = disabled
                    217:  *             1 = enabled
                    218:  *   B9..15  Reserved
                    219:  *
                    220:  * FTDI_SIO_SET_EVENT_CHAR
                    221:  *
                    222:  * Set the special event character for the specified communications port.
                    223:  * If the device sees this character it will immediately return the
                    224:  * data read so far - rather than wait 40ms or until 62 bytes are read
                    225:  * which is what normally happens.
                    226:  */
                    227:
                    228:
                    229:
                    230: /*
                    231:  *  BmRequestType:  0100 0000b
                    232:  *  bRequest:       FTDI_SIO_SET_ERROR_CHAR
                    233:  *  wValue:         Error Char
                    234:  *  wIndex:         Port
                    235:  *  wLength:        0
                    236:  *  Data:           None
                    237:  *
                    238:  *  Error Char
                    239:  *  B0..7  Error Character
                    240:  *  B8     Error Character Processing
                    241:  *           0 = disabled
                    242:  *           1 = enabled
                    243:  *  B9..15 Reserved
                    244:  *
                    245:  *
                    246:  * FTDI_SIO_SET_ERROR_CHAR
                    247:  * Set the parity error replacement character for the specified communications
                    248:  * port.
                    249:  */
                    250:
                    251:
                    252: /*
                    253:  *   BmRequestType:   1100 0000b
                    254:  *   bRequest:        FTDI_SIO_GET_MODEM_STATUS
                    255:  *   wValue:          zero
                    256:  *   wIndex:          Port
                    257:  *   wLength:         1
                    258:  *   Data:            Status
                    259:  *
                    260:  * One byte of data is returned
                    261:  * B0..3 0
                    262:  * B4    CTS
                    263:  *         0 = inactive
                    264:  *         1 = active
                    265:  * B5    DSR
                    266:  *         0 = inactive
                    267:  *         1 = active
                    268:  * B6    Ring Indicator (RI)
                    269:  *         0 = inactive
                    270:  *         1 = active
                    271:  * B7    Receive Line Signal Detect (RLSD)
                    272:  *         0 = inactive
                    273:  *         1 = active
                    274:  *
                    275:  * FTDI_SIO_GET_MODEM_STATUS
                    276:  * Retrieve the current value of the modem status register.
                    277:  */
                    278: #define FTDI_SIO_CTS_MASK 0x10
                    279: #define FTDI_SIO_DSR_MASK 0x20
                    280: #define FTDI_SIO_RI_MASK  0x40
                    281: #define FTDI_SIO_RLSD_MASK 0x80
                    282:
                    283:
                    284:
                    285: /*
                    286:  *
                    287:  * DATA FORMAT
                    288:  *
                    289:  * IN Endpoint
                    290:  *
                    291:  * The device reserves the first two bytes of data on this endpoint to contain
                    292:  * the current values of the modem and line status registers. In the absence of
                    293:  * data, the device generates a message consisting of these two status bytes
                    294:  * every 40 ms.
                    295:  *
                    296:  * Byte 0: Modem Status
                    297:  *   NOTE: 4 upper bits have same layout as the MSR register in a 16550
                    298:  *
                    299:  * Offset      Description
                    300:  * B0..3       Port
                    301:  * B4          Clear to Send (CTS)
                    302:  * B5          Data Set Ready (DSR)
                    303:  * B6          Ring Indicator (RI)
                    304:  * B7          Receive Line Signal Detect (RLSD)
                    305:  *
                    306:  * Byte 1: Line Status
                    307:  *   NOTE: same layout as the LSR register in a 16550
                    308:  *
                    309:  * Offset      Description
                    310:  * B0  Data Ready (DR)
                    311:  * B1  Overrun Error (OE)
                    312:  * B2  Parity Error (PE)
                    313:  * B3  Framing Error (FE)
                    314:  * B4  Break Interrupt (BI)
                    315:  * B5  Transmitter Holding Register (THRE)
                    316:  * B6  Transmitter Empty (TEMT)
                    317:  * B7  Error in RCVR FIFO
                    318:  *
                    319:  *
                    320:  * OUT Endpoint
                    321:  *
                    322:  * This device reserves the first bytes of data on this endpoint contain the
                    323:  * length and port identifier of the message. For the FTDI USB Serial converter
                    324:  * the port identifier is always 1.
                    325:  *
                    326:  * Byte 0: Port & length
                    327:  *
                    328:  * Offset      Description
                    329:  * B0..1       Port
                    330:  * B2..7       Length of message - (not including Byte 0)
                    331:  *
                    332:  */
                    333: #define FTDI_PORT_MASK 0x0f
                    334: #define FTDI_MSR_MASK 0xf0
                    335: #define FTDI_GET_MSR(p) (((p)[0]) & FTDI_MSR_MASK)
                    336: #define FTDI_GET_LSR(p) ((p)[1])
                    337: #define FTDI_LSR_MASK (~0x60) /* interesting bits */
                    338: #define FTDI_OUT_TAG(len, port) (((len) << 2) | (port))

CVSweb