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 |