io_ionsp.h (1da177e4c3f41524e886b7f1b8a0c1fc7321cac2) io_ionsp.h (a320471147fe61ed9260295958f07cc23ec360c8)
1/************************************************************************
2 *
3 * IONSP.H Definitions for I/O Networks Serial Protocol
4 *
5 * Copyright (C) 1997-1998 Inside Out Networks, Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 75 unchanged lines hidden (view full) ---

84************************************************************************/
85
86//
87// Define format of InterruptStatus packet returned from the
88// Interrupt pipe
89//
90
91struct int_status_pkt {
1/************************************************************************
2 *
3 * IONSP.H Definitions for I/O Networks Serial Protocol
4 *
5 * Copyright (C) 1997-1998 Inside Out Networks, Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 75 unchanged lines hidden (view full) ---

84************************************************************************/
85
86//
87// Define format of InterruptStatus packet returned from the
88// Interrupt pipe
89//
90
91struct int_status_pkt {
92 __u16 RxBytesAvail; // Additional bytes available to
93 // be read from Bulk IN pipe
94 __u16 TxCredits[ MAX_RS232_PORTS ]; // Additional space available in
95 // given port's TxBuffer
92 __u16 RxBytesAvail; // Additional bytes available to
93 // be read from Bulk IN pipe
94 __u16 TxCredits[MAX_RS232_PORTS]; // Additional space available in
95 // given port's TxBuffer
96};
97
98
99#define GET_INT_STATUS_SIZE(NumPorts) (sizeof(__u16) + (sizeof(__u16) * (NumPorts)))
100
101
102
103//

--- 6 unchanged lines hidden (view full) ---

110#define IOSP_CMD_HDR_SIZE 2
111
112#define IOSP_MAX_DATA_LENGTH 0x0FFF // 12 bits -> 4K
113
114#define IOSP_PORT_MASK 0x07 // Mask to isolate port number
115#define IOSP_CMD_STAT_BIT 0x80 // If set, this is command/status header
116
117#define IS_CMD_STAT_HDR(Byte1) ((Byte1) & IOSP_CMD_STAT_BIT)
96};
97
98
99#define GET_INT_STATUS_SIZE(NumPorts) (sizeof(__u16) + (sizeof(__u16) * (NumPorts)))
100
101
102
103//

--- 6 unchanged lines hidden (view full) ---

110#define IOSP_CMD_HDR_SIZE 2
111
112#define IOSP_MAX_DATA_LENGTH 0x0FFF // 12 bits -> 4K
113
114#define IOSP_PORT_MASK 0x07 // Mask to isolate port number
115#define IOSP_CMD_STAT_BIT 0x80 // If set, this is command/status header
116
117#define IS_CMD_STAT_HDR(Byte1) ((Byte1) & IOSP_CMD_STAT_BIT)
118#define IS_DATA_HDR(Byte1) (! IS_CMD_STAT_HDR(Byte1))
118#define IS_DATA_HDR(Byte1) (!IS_CMD_STAT_HDR(Byte1))
119
120#define IOSP_GET_HDR_PORT(Byte1) ((__u8) ((Byte1) & IOSP_PORT_MASK))
119
120#define IOSP_GET_HDR_PORT(Byte1) ((__u8) ((Byte1) & IOSP_PORT_MASK))
121#define IOSP_GET_HDR_DATA_LEN(Byte1, Byte2) ((__u16) ( ((__u16)((Byte1) & 0x78)) << 5) | (Byte2))
121#define IOSP_GET_HDR_DATA_LEN(Byte1, Byte2) ((__u16) (((__u16)((Byte1) & 0x78)) << 5) | (Byte2))
122#define IOSP_GET_STATUS_CODE(Byte1) ((__u8) (((Byte1) & 0x78) >> 3))
123
124
125//
126// These macros build the 1st and 2nd bytes for a data header
127//
122#define IOSP_GET_STATUS_CODE(Byte1) ((__u8) (((Byte1) & 0x78) >> 3))
123
124
125//
126// These macros build the 1st and 2nd bytes for a data header
127//
128#define IOSP_BUILD_DATA_HDR1(Port, Len) ((__u8) (((Port) | ((__u8) (((__u16) (Len)) >> 5) & 0x78 ))))
128#define IOSP_BUILD_DATA_HDR1(Port, Len) ((__u8) (((Port) | ((__u8) (((__u16) (Len)) >> 5) & 0x78))))
129#define IOSP_BUILD_DATA_HDR2(Port, Len) ((__u8) (Len))
130
131
132//
133// These macros build the 1st and 2nd bytes for a command header
134//
129#define IOSP_BUILD_DATA_HDR2(Port, Len) ((__u8) (Len))
130
131
132//
133// These macros build the 1st and 2nd bytes for a command header
134//
135#define IOSP_BUILD_CMD_HDR1(Port, Cmd) ((__u8) ( IOSP_CMD_STAT_BIT | (Port) | ((__u8) ((Cmd) << 3)) ))
135#define IOSP_BUILD_CMD_HDR1(Port, Cmd) ((__u8) (IOSP_CMD_STAT_BIT | (Port) | ((__u8) ((Cmd) << 3))))
136
137
138//--------------------------------------------------------------
139//
140// Define values for commands and command parameters
141// (sent from Host to Edgeport)
142//
143// 1ccccPPP P1P1P1P1 [ P2P2P2P2P2 ]...

--- 45 unchanged lines hidden (view full) ---

189#define IOSP_CMD_SET_BREAK 0x08 // Turn on the BREAK (LCR bit 6)
190#define IOSP_CMD_CLEAR_BREAK 0x09 // Turn off the BREAK (LCR bit 6)
191
192
193//
194// Define macros to simplify building of IOSP cmds
195//
196
136
137
138//--------------------------------------------------------------
139//
140// Define values for commands and command parameters
141// (sent from Host to Edgeport)
142//
143// 1ccccPPP P1P1P1P1 [ P2P2P2P2P2 ]...

--- 45 unchanged lines hidden (view full) ---

189#define IOSP_CMD_SET_BREAK 0x08 // Turn on the BREAK (LCR bit 6)
190#define IOSP_CMD_CLEAR_BREAK 0x09 // Turn off the BREAK (LCR bit 6)
191
192
193//
194// Define macros to simplify building of IOSP cmds
195//
196
197#define MAKE_CMD_WRITE_REG(ppBuf, pLen, Port, Reg, Val) \
198 do { \
199 (*(ppBuf))[0] = IOSP_BUILD_CMD_HDR1( (Port), IOSP_WRITE_UART_REG(Reg) ); \
200 (*(ppBuf))[1] = (Val); \
201 \
202 *ppBuf += 2; \
203 *pLen += 2; \
204 } while (0)
197#define MAKE_CMD_WRITE_REG(ppBuf, pLen, Port, Reg, Val) \
198do { \
199 (*(ppBuf))[0] = IOSP_BUILD_CMD_HDR1((Port), \
200 IOSP_WRITE_UART_REG(Reg)); \
201 (*(ppBuf))[1] = (Val); \
202 \
203 *ppBuf += 2; \
204 *pLen += 2; \
205} while (0)
205
206
206#define MAKE_CMD_EXT_CMD(ppBuf, pLen, Port, ExtCmd, Param) \
207 do { \
208 (*(ppBuf))[0] = IOSP_BUILD_CMD_HDR1( (Port), IOSP_EXT_CMD ); \
209 (*(ppBuf))[1] = (ExtCmd); \
210 (*(ppBuf))[2] = (Param); \
211 \
212 *ppBuf += 3; \
213 *pLen += 3; \
214 } while (0)
207#define MAKE_CMD_EXT_CMD(ppBuf, pLen, Port, ExtCmd, Param) \
208do { \
209 (*(ppBuf))[0] = IOSP_BUILD_CMD_HDR1((Port), IOSP_EXT_CMD); \
210 (*(ppBuf))[1] = (ExtCmd); \
211 (*(ppBuf))[2] = (Param); \
212 \
213 *ppBuf += 3; \
214 *pLen += 3; \
215} while (0)
215
216
217
218//--------------------------------------------------------------
219//
220// Define format of flow control commands
221// (sent from Host to Edgeport)
222//

--- 82 unchanged lines hidden (view full) ---

305// P0 = 11001000
306// P1 = IOSP_CMD_SET_XOFF_CHAR
307// P2 = 0x13
308
309
310//
311// IOSP_CMD_RX_CHECK_REQ
312//
216
217
218
219//--------------------------------------------------------------
220//
221// Define format of flow control commands
222// (sent from Host to Edgeport)
223//

--- 82 unchanged lines hidden (view full) ---

306// P0 = 11001000
307// P1 = IOSP_CMD_SET_XOFF_CHAR
308// P2 = 0x13
309
310
311//
312// IOSP_CMD_RX_CHECK_REQ
313//
313// This command is used to assist in the implementation of the
314// IOCTL_SERIAL_PURGE Windows IOCTL.
315// This IOSP command tries to place a marker at the end of the RX
316// queue in the Edgeport. If the Edgeport RX queue is full then
317// the Check will be discarded.
318// It is up to the device driver to timeout waiting for the
319// RX_CHECK_RSP. If a RX_CHECK_RSP is received, the driver is
320// sure that all data has been received from the edgeport and
314// This command is used to assist in the implementation of the
315// IOCTL_SERIAL_PURGE Windows IOCTL.
316// This IOSP command tries to place a marker at the end of the RX
317// queue in the Edgeport. If the Edgeport RX queue is full then
318// the Check will be discarded.
319// It is up to the device driver to timeout waiting for the
320// RX_CHECK_RSP. If a RX_CHECK_RSP is received, the driver is
321// sure that all data has been received from the edgeport and
321// may now purge any internal RX buffers.
322// may now purge any internal RX buffers.
322// Note tat the sequence numbers may be used to detect lost
323// Note tat the sequence numbers may be used to detect lost
323// CHECK_REQs.
324
325// Example for Port 0
326// P0 = 11001000
327// P1 = IOSP_CMD_RX_CHECK_REQ
328// P2 = Sequence number
329
330

--- 5 unchanged lines hidden (view full) ---

336
337//--------------------------------------------------------------
338//
339// Define values for status and status parameters
340// (received by Host from Edgeport)
341//
342// 1ssssPPP P1P1P1P1 [ P2P2P2P2P2 ]...
343//
324// CHECK_REQs.
325
326// Example for Port 0
327// P0 = 11001000
328// P1 = IOSP_CMD_RX_CHECK_REQ
329// P2 = Sequence number
330
331

--- 5 unchanged lines hidden (view full) ---

337
338//--------------------------------------------------------------
339//
340// Define values for status and status parameters
341// (received by Host from Edgeport)
342//
343// 1ssssPPP P1P1P1P1 [ P2P2P2P2P2 ]...
344//
344// ssss: 00-07 2-byte status. ssss identifies which UART register
345// ssss: 00-07 2-byte status. ssss identifies which UART register
345// has changed value, and the new value is in P1.
346// Note that the ssss values do not correspond to the
347// 16554 register numbers given in 16554.H. Instead,
348// see below for definitions of the ssss numbers
349// used in this status message.
350//
351// 08-0B 3-byte status: ==== P1 ==== ==== P2 ====
352// 08 LSR_DATA: New LSR Errored byte

--- 25 unchanged lines hidden (view full) ---

378// (ie, when LSR bit 0 = 0).
379
380#define IOSP_STATUS_MSR 0x01 // P1 is new value of MSR register.
381
382// Bits defined in 16554.H. Edgeport
383// returns this in order to report
384// changes in modem status lines
385// (CTS, DSR, RI, CD)
346// has changed value, and the new value is in P1.
347// Note that the ssss values do not correspond to the
348// 16554 register numbers given in 16554.H. Instead,
349// see below for definitions of the ssss numbers
350// used in this status message.
351//
352// 08-0B 3-byte status: ==== P1 ==== ==== P2 ====
353// 08 LSR_DATA: New LSR Errored byte

--- 25 unchanged lines hidden (view full) ---

379// (ie, when LSR bit 0 = 0).
380
381#define IOSP_STATUS_MSR 0x01 // P1 is new value of MSR register.
382
383// Bits defined in 16554.H. Edgeport
384// returns this in order to report
385// changes in modem status lines
386// (CTS, DSR, RI, CD)
386//
387//
387
388// 0x02 // Available for future expansion
388
389// 0x02 // Available for future expansion
389// 0x03 //
390// 0x04 //
391// 0x05 //
392// 0x06 //
393// 0x07 //
390// 0x03 //
391// 0x04 //
392// 0x05 //
393// 0x06 //
394// 0x07 //
394
395
396/****************************************************
397 * SSSS values for 3-byte status messages (8-A)
398 ****************************************************/
399
400#define IOSP_STATUS_LSR_DATA 0x08 // P1 is new value of LSR register (same as STATUS_LSR)
401
402// P2 is errored character read from
395
396
397/****************************************************
398 * SSSS values for 3-byte status messages (8-A)
399 ****************************************************/
400
401#define IOSP_STATUS_LSR_DATA 0x08 // P1 is new value of LSR register (same as STATUS_LSR)
402
403// P2 is errored character read from
403// RxFIFO after LSR reported an error.
404// RxFIFO after LSR reported an error.
404
405#define IOSP_EXT_STATUS 0x09 // P1 is status/response code, param in P2.
406
407
408// Response Codes (P1 values) for 3-byte status messages
409
410#define IOSP_EXT_STATUS_CHASE_RSP 0 // Reply to CHASE_PORT cmd. P2 is outcome:
405
406#define IOSP_EXT_STATUS 0x09 // P1 is status/response code, param in P2.
407
408
409// Response Codes (P1 values) for 3-byte status messages
410
411#define IOSP_EXT_STATUS_CHASE_RSP 0 // Reply to CHASE_PORT cmd. P2 is outcome:
411#define IOSP_EXT_STATUS_CHASE_PASS 0 // P2 = 0: All Tx data drained successfully
412#define IOSP_EXT_STATUS_CHASE_PASS 0 // P2 = 0: All Tx data drained successfully
412#define IOSP_EXT_STATUS_CHASE_FAIL 1 // P2 = 1: Timed out (stuck due to flow
413
414// control from remote device).
415
416#define IOSP_EXT_STATUS_RX_CHECK_RSP 1 // Reply to RX_CHECK cmd. P2 is sequence number
417
418
419#define IOSP_STATUS_OPEN_RSP 0x0A // Reply to OPEN_PORT cmd.

--- 21 unchanged lines hidden (view full) ---

441// 0x0D // Currently unused, available.
442
443
444
445//
446// Macros to parse status messages
447//
448
413#define IOSP_EXT_STATUS_CHASE_FAIL 1 // P2 = 1: Timed out (stuck due to flow
414
415// control from remote device).
416
417#define IOSP_EXT_STATUS_RX_CHECK_RSP 1 // Reply to RX_CHECK cmd. P2 is sequence number
418
419
420#define IOSP_STATUS_OPEN_RSP 0x0A // Reply to OPEN_PORT cmd.

--- 21 unchanged lines hidden (view full) ---

442// 0x0D // Currently unused, available.
443
444
445
446//
447// Macros to parse status messages
448//
449
449#define IOSP_GET_STATUS_LEN(code) ( (code) < 8 ? 2 : ((code) < 0x0A ? 3 : 4) )
450#define IOSP_GET_STATUS_LEN(code) ((code) < 8 ? 2 : ((code) < 0x0A ? 3 : 4))
450
451
451#define IOSP_STATUS_IS_2BYTE(code) ( (code) < 0x08 )
452#define IOSP_STATUS_IS_3BYTE(code) ( ((code) >= 0x08) && ((code) <= 0x0B) )
453#define IOSP_STATUS_IS_4BYTE(code) ( ((code) >= 0x0C) && ((code) <= 0x0D) )
452#define IOSP_STATUS_IS_2BYTE(code) ((code) < 0x08)
453#define IOSP_STATUS_IS_3BYTE(code) (((code) >= 0x08) && ((code) <= 0x0B))
454#define IOSP_STATUS_IS_4BYTE(code) (((code) >= 0x0C) && ((code) <= 0x0D))
454
455