summaryrefslogtreecommitdiff
path: root/drivers/char/ip2/i2cmd.c
blob: fd299d6c42ace5165643511d3ce9441b02d32e31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/*******************************************************************************
*
*   (c) 1998 by Computone Corporation
*
********************************************************************************
*
*
*   PACKAGE:     Linux tty Device Driver for IntelliPort family of multiport
*                serial I/O controllers.
*
*   DESCRIPTION: Definition table for In-line and Bypass commands. Applicable
*                only when the standard loadware is active. (This is included
*                source code, not a separate compilation module.)
*
*******************************************************************************/

//------------------------------------------------------------------------------
//
// Revision History:
//
// 10 October 1991   MAG First Draft
//  7 November 1991  MAG Reflects additional commands.
// 24 February 1992  MAG Additional commands for 1.4.x loadware
// 11 March 1992     MAG Additional commands
// 30 March 1992     MAG Additional command: CMD_DSS_NOW
// 18 May 1992       MAG Discovered commands 39 & 40 must be at the end of a
//                       packet: affects implementation.
//------------------------------------------------------------------------------

//************
//* Includes *
//************

#include "i2cmd.h"   /* To get some bit-defines */

//------------------------------------------------------------------------------
// Here is the table of global arrays which represent each type of command
// supported in the IntelliPort standard loadware. See also i2cmd.h
// for a more complete explanation of what is going on.
//------------------------------------------------------------------------------

// Here are the various globals: note that the names are not used except through
// the macros defined in i2cmd.h. Also note that although they are character
// arrays here (for extendability) they are cast to structure pointers in the
// i2cmd.h macros. See i2cmd.h for flags definitions.

//                     Length Flags Command
static UCHAR ct02[] = { 1, BTH,     0x02                     }; // DTR UP
static UCHAR ct03[] = { 1, BTH,     0x03                     }; // DTR DN
static UCHAR ct04[] = { 1, BTH,     0x04                     }; // RTS UP
static UCHAR ct05[] = { 1, BTH,     0x05                     }; // RTS DN
static UCHAR ct06[] = { 1, BYP,     0x06                     }; // START FL
static UCHAR ct07[] = { 2, BTH,     0x07,0                   }; // BAUD
static UCHAR ct08[] = { 2, BTH,     0x08,0                   }; // BITS
static UCHAR ct09[] = { 2, BTH,     0x09,0                   }; // STOP
static UCHAR ct10[] = { 2, BTH,     0x0A,0                   }; // PARITY
static UCHAR ct11[] = { 2, BTH,     0x0B,0                   }; // XON
static UCHAR ct12[] = { 2, BTH,     0x0C,0                   }; // XOFF
static UCHAR ct13[] = { 1, BTH,     0x0D                     }; // STOP FL
static UCHAR ct14[] = { 1, BYP|VIP, 0x0E                     }; // ACK HOTK
//static UCHAR ct15[]={ 2, BTH|VIP, 0x0F,0                   }; // IRQ SET
static UCHAR ct16[] = { 2, INL,     0x10,0                   }; // IXONOPTS
static UCHAR ct17[] = { 2, INL,     0x11,0                   }; // OXONOPTS
static UCHAR ct18[] = { 1, INL,     0x12                     }; // CTSENAB
static UCHAR ct19[] = { 1, BTH,     0x13                     }; // CTSDSAB
static UCHAR ct20[] = { 1, INL,     0x14                     }; // DCDENAB
static UCHAR ct21[] = { 1, BTH,     0x15                     }; // DCDDSAB
static UCHAR ct22[] = { 1, BTH,     0x16                     }; // DSRENAB
static UCHAR ct23[] = { 1, BTH,     0x17                     }; // DSRDSAB
static UCHAR ct24[] = { 1, BTH,     0x18                     }; // RIENAB
static UCHAR ct25[] = { 1, BTH,     0x19                     }; // RIDSAB
static UCHAR ct26[] = { 2, BTH,     0x1A,0                   }; // BRKENAB
static UCHAR ct27[] = { 1, BTH,     0x1B                     }; // BRKDSAB
//static UCHAR ct28[]={ 2, BTH,     0x1C,0                   }; // MAXBLOKSIZE
//static UCHAR ct29[]={ 2, 0,       0x1D,0                   }; // reserved
static UCHAR ct30[] = { 1, INL,     0x1E                     }; // CTSFLOWENAB
static UCHAR ct31[] = { 1, INL,     0x1F                     }; // CTSFLOWDSAB
static UCHAR ct32[] = { 1, INL,     0x20                     }; // RTSFLOWENAB
static UCHAR ct33[] = { 1, INL,     0x21                     }; // RTSFLOWDSAB
static UCHAR ct34[] = { 2, BTH,     0x22,0                   }; // ISTRIPMODE
static UCHAR ct35[] = { 2, BTH|END, 0x23,0                   }; // SENDBREAK
static UCHAR ct36[] = { 2, BTH,     0x24,0                   }; // SETERRMODE
//static UCHAR ct36a[]={ 3, INL,    0x24,0,0                 }; // SET_REPLACE

// The following is listed for completeness, but should never be sent directly
// by user-level code. It is sent only by library routines in response to data
// movement.
//static UCHAR ct37[]={ 5, BYP|VIP, 0x25,0,0,0,0             }; // FLOW PACKET

// Back to normal
//static UCHAR ct38[] = {11, BTH|VAR, 0x26,0,0,0,0,0,0,0,0,0,0 }; // DEF KEY SEQ
//static UCHAR ct39[]={ 3, BTH|END, 0x27,0,0                 }; // OPOSTON
//static UCHAR ct40[]={ 1, BTH|END, 0x28                     }; // OPOSTOFF
static UCHAR ct41[] = { 1, BYP,     0x29                     }; // RESUME
//static UCHAR ct42[]={ 2, BTH,     0x2A,0                   }; // TXBAUD
//static UCHAR ct43[]={ 2, BTH,     0x2B,0                   }; // RXBAUD
//static UCHAR ct44[]={ 2, BTH,     0x2C,0                   }; // MS PING
//static UCHAR ct45[]={ 1, BTH,     0x2D                     }; // HOTENAB
//static UCHAR ct46[]={ 1, BTH,     0x2E                     }; // HOTDSAB
static UCHAR ct47[] = { 7, BTH,     0x2F,0,0,0,0,0,0         }; // UNIX FLAGS
//static UCHAR ct48[]={ 1, BTH,     0x30                     }; // DSRFLOWENAB
//static UCHAR ct49[]={ 1, BTH,     0x31                     }; // DSRFLOWDSAB
//static UCHAR ct50[]={ 1, BTH,     0x32                     }; // DTRFLOWENAB
//static UCHAR ct51[]={ 1, BTH,     0x33                     }; // DTRFLOWDSAB
//static UCHAR ct52[]={ 1, BTH,     0x34                     }; // BAUDTABRESET
//static UCHAR ct53[] = { 3, BTH,     0x35,0,0                 }; // BAUDREMAP
static UCHAR ct54[] = { 3, BTH,     0x36,0,0                 }; // CUSTOMBAUD1
static UCHAR ct55[] = { 3, BTH,     0x37,0,0                 }; // CUSTOMBAUD2
static UCHAR ct56[] = { 2, BTH|END, 0x38,0                   }; // PAUSE
static UCHAR ct57[] = { 1, BYP,     0x39                     }; // SUSPEND
static UCHAR ct58[] = { 1, BYP,     0x3A                     }; // UNSUSPEND
static UCHAR ct59[] = { 2, BTH,     0x3B,0                   }; // PARITYCHK
static UCHAR ct60[] = { 1, INL|VIP, 0x3C                     }; // BOOKMARKREQ
//static UCHAR ct61[]={ 2, BTH,     0x3D,0                   }; // INTERNALLOOP
//static UCHAR ct62[]={ 2, BTH,     0x3E,0                   }; // HOTKTIMEOUT
static UCHAR ct63[] = { 2, INL,     0x3F,0                   }; // SETTXON
static UCHAR ct64[] = { 2, INL,     0x40,0                   }; // SETTXOFF
//static UCHAR ct65[]={ 2, BTH,     0x41,0                   }; // SETAUTORTS
//static UCHAR ct66[]={ 2, BTH,     0x42,0                   }; // SETHIGHWAT
//static UCHAR ct67[]={ 2, BYP,     0x43,0                   }; // STARTSELFL
//static UCHAR ct68[]={ 2, INL,     0x44,0                   }; // ENDSELFL
//static UCHAR ct69[]={ 1, BYP,     0x45                     }; // HWFLOW_OFF
//static UCHAR ct70[]={ 1, BTH,     0x46                     }; // ODSRFL_ENAB
//static UCHAR ct71[]={ 1, BTH,     0x47                     }; // ODSRFL_DSAB
//static UCHAR ct72[]={ 1, BTH,     0x48                     }; // ODCDFL_ENAB
//static UCHAR ct73[]={ 1, BTH,     0x49                     }; // ODCDFL_DSAB
//static UCHAR ct74[]={ 2, BTH,     0x4A,0                   }; // LOADLEVEL
//static UCHAR ct75[]={ 2, BTH,     0x4B,0                   }; // STATDATA
//static UCHAR ct76[]={ 1, BYP,     0x4C                     }; // BREAK_ON
//static UCHAR ct77[]={ 1, BYP,     0x4D                     }; // BREAK_OFF
//static UCHAR ct78[]={ 1, BYP,     0x4E                     }; // GETFC
static UCHAR ct79[] = { 2, BYP,     0x4F,0                   }; // XMIT_NOW
//static UCHAR ct80[]={ 4, BTH,     0x50,0,0,0               }; // DIVISOR_LATCH
//static UCHAR ct81[]={ 1, BYP,     0x51                     }; // GET_STATUS
//static UCHAR ct82[]={ 1, BYP,     0x52                     }; // GET_TXCNT
//static UCHAR ct83[]={ 1, BYP,     0x53                     }; // GET_RXCNT
//static UCHAR ct84[]={ 1, BYP,     0x54                     }; // GET_BOXIDS
//static UCHAR ct85[]={10, BYP,     0x55,0,0,0,0,0,0,0,0,0   }; // ENAB_MULT
//static UCHAR ct86[]={ 2, BTH,     0x56,0                   }; // RCV_ENABLE
static UCHAR ct87[] = { 1, BYP,     0x57                     }; // HW_TEST
//static UCHAR ct88[]={ 3, BTH,     0x58,0,0                 }; // RCV_THRESHOLD
static UCHAR ct89[]={ 1, BYP,     0x59                     }; // DSS_NOW
//static UCHAR ct90[]={ 3, BYP,     0x5A,0,0                 }; // Set SILO
//static UCHAR ct91[]={ 2, BYP,     0x5B,0                   }; // timed break

// Some composite commands as well
//static UCHAR cc01[]={ 2, BTH,     0x02,0x04                }; // DTR & RTS UP
//static UCHAR cc02[]={ 2, BTH,     0x03,0x05                }; // DTR & RTS DN

//********
//* Code *
//********

//******************************************************************************
// Function:   i2cmdUnixFlags(iflag, cflag, lflag)
// Parameters: Unix tty flags
//
// Returns:    Pointer to command structure
//
// Description:
//
// This routine sets the parameters of command 47 and returns a pointer to the
// appropriate structure.
//******************************************************************************
cmdSyntaxPtr
i2cmdUnixFlags(unsigned short iflag,unsigned short cflag,unsigned short lflag)
{
	cmdSyntaxPtr pCM = (cmdSyntaxPtr) ct47;

	pCM->cmd[1] = (unsigned char)  iflag;
	pCM->cmd[2] = (unsigned char) (iflag >> 8);
	pCM->cmd[3] = (unsigned char)  cflag;
	pCM->cmd[4] = (unsigned char) (cflag >> 8);
	pCM->cmd[5] = (unsigned char)  lflag;
	pCM->cmd[6] = (unsigned char) (lflag >> 8);
	return pCM;
}

//******************************************************************************
// Function:   i2cmdBaudDef(which, rate)
// Parameters: ?
//
// Returns:    Pointer to command structure
//
// Description:
//
// This routine sets the parameters of commands 54 or 55 (according to the
// argument which), and returns a pointer to the appropriate structure.
//******************************************************************************
cmdSyntaxPtr
i2cmdBaudDef(int which, unsigned short rate)
{
	cmdSyntaxPtr pCM;

	switch(which)
	{
	case 1:
		pCM = (cmdSyntaxPtr) ct54;
		break;
	default:
	case 2:
		pCM = (cmdSyntaxPtr) ct55;
		break;
	}
	pCM->cmd[1] = (unsigned char) rate;
	pCM->cmd[2] = (unsigned char) (rate >> 8);
	return pCM;
}