1*53ee8cc1Swenshuai.xi /*****************************************************************************/ 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi /* 4*53ee8cc1Swenshuai.xi * cdk.h -- CDK interface definitions. 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * Copyright (C) 1996-1998 Stallion Technologies 7*53ee8cc1Swenshuai.xi * Copyright (C) 1994-1996 Greg Ungerer. 8*53ee8cc1Swenshuai.xi * 9*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or modify 10*53ee8cc1Swenshuai.xi * it under the terms of the GNU General Public License as published by 11*53ee8cc1Swenshuai.xi * the Free Software Foundation; either version 2 of the License, or 12*53ee8cc1Swenshuai.xi * (at your option) any later version. 13*53ee8cc1Swenshuai.xi * 14*53ee8cc1Swenshuai.xi * This program is distributed in the hope that it will be useful, 15*53ee8cc1Swenshuai.xi * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*53ee8cc1Swenshuai.xi * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*53ee8cc1Swenshuai.xi * GNU General Public License for more details. 18*53ee8cc1Swenshuai.xi * 19*53ee8cc1Swenshuai.xi * You should have received a copy of the GNU General Public License 20*53ee8cc1Swenshuai.xi * along with this program; if not, write to the Free Software 21*53ee8cc1Swenshuai.xi * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22*53ee8cc1Swenshuai.xi */ 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi /*****************************************************************************/ 25*53ee8cc1Swenshuai.xi #ifndef _CDK_H 26*53ee8cc1Swenshuai.xi #define _CDK_H 27*53ee8cc1Swenshuai.xi /*****************************************************************************/ 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi #pragma pack(2) 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi /* 32*53ee8cc1Swenshuai.xi * The following set of definitions is used to communicate with the 33*53ee8cc1Swenshuai.xi * shared memory interface of the Stallion intelligent multiport serial 34*53ee8cc1Swenshuai.xi * boards. The definitions in this file are taken directly from the 35*53ee8cc1Swenshuai.xi * document titled "Generic Stackable Interface, Downloader and 36*53ee8cc1Swenshuai.xi * Communications Development Kit". 37*53ee8cc1Swenshuai.xi */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi /* 40*53ee8cc1Swenshuai.xi * Define the set of important shared memory addresses. These are 41*53ee8cc1Swenshuai.xi * required to initialize the board and get things started. All of these 42*53ee8cc1Swenshuai.xi * addresses are relative to the start of the shared memory. 43*53ee8cc1Swenshuai.xi */ 44*53ee8cc1Swenshuai.xi #define CDK_SIGADDR 0x200 45*53ee8cc1Swenshuai.xi #define CDK_FEATADDR 0x280 46*53ee8cc1Swenshuai.xi #define CDK_CDKADDR 0x300 47*53ee8cc1Swenshuai.xi #define CDK_RDYADDR 0x262 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi #define CDK_ALIVEMARKER 13 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi /* 52*53ee8cc1Swenshuai.xi * On hardware power up the ROMs located on the EasyConnection 8/64 will 53*53ee8cc1Swenshuai.xi * fill out the following signature information into shared memory. This 54*53ee8cc1Swenshuai.xi * way the host system can quickly determine that the board is present 55*53ee8cc1Swenshuai.xi * and is operational. 56*53ee8cc1Swenshuai.xi */ 57*53ee8cc1Swenshuai.xi typedef struct cdkecpsig { 58*53ee8cc1Swenshuai.xi unsigned long magic; 59*53ee8cc1Swenshuai.xi unsigned short romver; 60*53ee8cc1Swenshuai.xi unsigned short cputype; 61*53ee8cc1Swenshuai.xi unsigned char panelid[8]; 62*53ee8cc1Swenshuai.xi } cdkecpsig_t; 63*53ee8cc1Swenshuai.xi 64*53ee8cc1Swenshuai.xi #define ECP_MAGIC 0x21504345 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi /* 67*53ee8cc1Swenshuai.xi * On hardware power up the ROMs located on the ONboard, Stallion and 68*53ee8cc1Swenshuai.xi * Brumbys will fill out the following signature information into shared 69*53ee8cc1Swenshuai.xi * memory. This way the host system can quickly determine that the board 70*53ee8cc1Swenshuai.xi * is present and is operational. 71*53ee8cc1Swenshuai.xi */ 72*53ee8cc1Swenshuai.xi typedef struct cdkonbsig { 73*53ee8cc1Swenshuai.xi unsigned short magic0; 74*53ee8cc1Swenshuai.xi unsigned short magic1; 75*53ee8cc1Swenshuai.xi unsigned short magic2; 76*53ee8cc1Swenshuai.xi unsigned short magic3; 77*53ee8cc1Swenshuai.xi unsigned short romver; 78*53ee8cc1Swenshuai.xi unsigned short memoff; 79*53ee8cc1Swenshuai.xi unsigned short memseg; 80*53ee8cc1Swenshuai.xi unsigned short amask0; 81*53ee8cc1Swenshuai.xi unsigned short pic; 82*53ee8cc1Swenshuai.xi unsigned short status; 83*53ee8cc1Swenshuai.xi unsigned short btype; 84*53ee8cc1Swenshuai.xi unsigned short clkticks; 85*53ee8cc1Swenshuai.xi unsigned short clkspeed; 86*53ee8cc1Swenshuai.xi unsigned short amask1; 87*53ee8cc1Swenshuai.xi unsigned short amask2; 88*53ee8cc1Swenshuai.xi } cdkonbsig_t; 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi #define ONB_MAGIC0 0xf2a7 91*53ee8cc1Swenshuai.xi #define ONB_MAGIC1 0xa149 92*53ee8cc1Swenshuai.xi #define ONB_MAGIC2 0x6352 93*53ee8cc1Swenshuai.xi #define ONB_MAGIC3 0xf121 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi /* 96*53ee8cc1Swenshuai.xi * Define the feature area structure. The feature area is the set of 97*53ee8cc1Swenshuai.xi * startup parameters used by the slave image when it starts executing. 98*53ee8cc1Swenshuai.xi * They allow for the specification of buffer sizes, debug trace, etc. 99*53ee8cc1Swenshuai.xi */ 100*53ee8cc1Swenshuai.xi typedef struct cdkfeature { 101*53ee8cc1Swenshuai.xi unsigned long debug; 102*53ee8cc1Swenshuai.xi unsigned long banner; 103*53ee8cc1Swenshuai.xi unsigned long etype; 104*53ee8cc1Swenshuai.xi unsigned long nrdevs; 105*53ee8cc1Swenshuai.xi unsigned long brdspec; 106*53ee8cc1Swenshuai.xi unsigned long txrqsize; 107*53ee8cc1Swenshuai.xi unsigned long rxrqsize; 108*53ee8cc1Swenshuai.xi unsigned long flags; 109*53ee8cc1Swenshuai.xi } cdkfeature_t; 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi #define ETYP_DDK 0 112*53ee8cc1Swenshuai.xi #define ETYP_CDK 1 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi /* 115*53ee8cc1Swenshuai.xi * Define the CDK header structure. This is the info that the slave 116*53ee8cc1Swenshuai.xi * environment sets up after it has been downloaded and started. It 117*53ee8cc1Swenshuai.xi * essentially provides a memory map for the shared memory interface. 118*53ee8cc1Swenshuai.xi */ 119*53ee8cc1Swenshuai.xi typedef struct cdkhdr { 120*53ee8cc1Swenshuai.xi unsigned short command; 121*53ee8cc1Swenshuai.xi unsigned short status; 122*53ee8cc1Swenshuai.xi unsigned short port; 123*53ee8cc1Swenshuai.xi unsigned short mode; 124*53ee8cc1Swenshuai.xi unsigned long cmd_buf[14]; 125*53ee8cc1Swenshuai.xi unsigned short alive_cnt; 126*53ee8cc1Swenshuai.xi unsigned short intrpt_mode; 127*53ee8cc1Swenshuai.xi unsigned char intrpt_id[8]; 128*53ee8cc1Swenshuai.xi unsigned char ver_release; 129*53ee8cc1Swenshuai.xi unsigned char ver_modification; 130*53ee8cc1Swenshuai.xi unsigned char ver_fix; 131*53ee8cc1Swenshuai.xi unsigned char deadman_restart; 132*53ee8cc1Swenshuai.xi unsigned short deadman; 133*53ee8cc1Swenshuai.xi unsigned short nrdevs; 134*53ee8cc1Swenshuai.xi unsigned long memp; 135*53ee8cc1Swenshuai.xi unsigned long hostp; 136*53ee8cc1Swenshuai.xi unsigned long slavep; 137*53ee8cc1Swenshuai.xi unsigned char hostreq; 138*53ee8cc1Swenshuai.xi unsigned char slavereq; 139*53ee8cc1Swenshuai.xi unsigned char cmd_reserved[30]; 140*53ee8cc1Swenshuai.xi } cdkhdr_t; 141*53ee8cc1Swenshuai.xi 142*53ee8cc1Swenshuai.xi #define MODE_DDK 0 143*53ee8cc1Swenshuai.xi #define MODE_CDK 1 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi #define IMD_INTR 0x0 146*53ee8cc1Swenshuai.xi #define IMD_PPINTR 0x1 147*53ee8cc1Swenshuai.xi #define IMD_POLL 0xff 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi /* 150*53ee8cc1Swenshuai.xi * Define the memory mapping structure. This structure is pointed to by 151*53ee8cc1Swenshuai.xi * the memp field in the stlcdkhdr struct. As many as these structures 152*53ee8cc1Swenshuai.xi * as required are layed out in shared memory to define how the rest of 153*53ee8cc1Swenshuai.xi * shared memory is divided up. There will be one for each port. 154*53ee8cc1Swenshuai.xi */ 155*53ee8cc1Swenshuai.xi typedef struct cdkmem { 156*53ee8cc1Swenshuai.xi unsigned short dtype; 157*53ee8cc1Swenshuai.xi unsigned long offset; 158*53ee8cc1Swenshuai.xi } cdkmem_t; 159*53ee8cc1Swenshuai.xi 160*53ee8cc1Swenshuai.xi #define TYP_UNDEFINED 0x0 161*53ee8cc1Swenshuai.xi #define TYP_ASYNCTRL 0x1 162*53ee8cc1Swenshuai.xi #define TYP_ASYNC 0x20 163*53ee8cc1Swenshuai.xi #define TYP_PARALLEL 0x40 164*53ee8cc1Swenshuai.xi #define TYP_SYNCX21 0x60 165*53ee8cc1Swenshuai.xi 166*53ee8cc1Swenshuai.xi /*****************************************************************************/ 167*53ee8cc1Swenshuai.xi 168*53ee8cc1Swenshuai.xi /* 169*53ee8cc1Swenshuai.xi * Following is a set of defines and structures used to actually deal 170*53ee8cc1Swenshuai.xi * with the serial ports on the board. Firstly is the set of commands 171*53ee8cc1Swenshuai.xi * that can be applied to ports. 172*53ee8cc1Swenshuai.xi */ 173*53ee8cc1Swenshuai.xi #define ASYCMD (((unsigned long) 'a') << 8) 174*53ee8cc1Swenshuai.xi 175*53ee8cc1Swenshuai.xi #define A_NULL (ASYCMD | 0) 176*53ee8cc1Swenshuai.xi #define A_FLUSH (ASYCMD | 1) 177*53ee8cc1Swenshuai.xi #define A_BREAK (ASYCMD | 2) 178*53ee8cc1Swenshuai.xi #define A_GETPORT (ASYCMD | 3) 179*53ee8cc1Swenshuai.xi #define A_SETPORT (ASYCMD | 4) 180*53ee8cc1Swenshuai.xi #define A_SETPORTF (ASYCMD | 5) 181*53ee8cc1Swenshuai.xi #define A_SETPORTFTX (ASYCMD | 6) 182*53ee8cc1Swenshuai.xi #define A_SETPORTFRX (ASYCMD | 7) 183*53ee8cc1Swenshuai.xi #define A_GETSIGNALS (ASYCMD | 8) 184*53ee8cc1Swenshuai.xi #define A_SETSIGNALS (ASYCMD | 9) 185*53ee8cc1Swenshuai.xi #define A_SETSIGNALSF (ASYCMD | 10) 186*53ee8cc1Swenshuai.xi #define A_SETSIGNALSFTX (ASYCMD | 11) 187*53ee8cc1Swenshuai.xi #define A_SETSIGNALSFRX (ASYCMD | 12) 188*53ee8cc1Swenshuai.xi #define A_GETNOTIFY (ASYCMD | 13) 189*53ee8cc1Swenshuai.xi #define A_SETNOTIFY (ASYCMD | 14) 190*53ee8cc1Swenshuai.xi #define A_NOTIFY (ASYCMD | 15) 191*53ee8cc1Swenshuai.xi #define A_PORTCTRL (ASYCMD | 16) 192*53ee8cc1Swenshuai.xi #define A_GETSTATS (ASYCMD | 17) 193*53ee8cc1Swenshuai.xi #define A_RQSTATE (ASYCMD | 18) 194*53ee8cc1Swenshuai.xi #define A_FLOWSTATE (ASYCMD | 19) 195*53ee8cc1Swenshuai.xi #define A_CLEARSTATS (ASYCMD | 20) 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi /* 198*53ee8cc1Swenshuai.xi * Define those arguments used for simple commands. 199*53ee8cc1Swenshuai.xi */ 200*53ee8cc1Swenshuai.xi #define FLUSHRX 0x1 201*53ee8cc1Swenshuai.xi #define FLUSHTX 0x2 202*53ee8cc1Swenshuai.xi 203*53ee8cc1Swenshuai.xi #define BREAKON -1 204*53ee8cc1Swenshuai.xi #define BREAKOFF -2 205*53ee8cc1Swenshuai.xi 206*53ee8cc1Swenshuai.xi /* 207*53ee8cc1Swenshuai.xi * Define the port setting structure, and all those defines that go along 208*53ee8cc1Swenshuai.xi * with it. Basically this structure defines the characteristics of this 209*53ee8cc1Swenshuai.xi * port: baud rate, chars, parity, input/output char cooking etc. 210*53ee8cc1Swenshuai.xi */ 211*53ee8cc1Swenshuai.xi typedef struct asyport { 212*53ee8cc1Swenshuai.xi unsigned long baudout; 213*53ee8cc1Swenshuai.xi unsigned long baudin; 214*53ee8cc1Swenshuai.xi unsigned long iflag; 215*53ee8cc1Swenshuai.xi unsigned long oflag; 216*53ee8cc1Swenshuai.xi unsigned long lflag; 217*53ee8cc1Swenshuai.xi unsigned long pflag; 218*53ee8cc1Swenshuai.xi unsigned long flow; 219*53ee8cc1Swenshuai.xi unsigned long spare1; 220*53ee8cc1Swenshuai.xi unsigned short vtime; 221*53ee8cc1Swenshuai.xi unsigned short vmin; 222*53ee8cc1Swenshuai.xi unsigned short txlo; 223*53ee8cc1Swenshuai.xi unsigned short txhi; 224*53ee8cc1Swenshuai.xi unsigned short rxlo; 225*53ee8cc1Swenshuai.xi unsigned short rxhi; 226*53ee8cc1Swenshuai.xi unsigned short rxhog; 227*53ee8cc1Swenshuai.xi unsigned short spare2; 228*53ee8cc1Swenshuai.xi unsigned char csize; 229*53ee8cc1Swenshuai.xi unsigned char stopbs; 230*53ee8cc1Swenshuai.xi unsigned char parity; 231*53ee8cc1Swenshuai.xi unsigned char stopin; 232*53ee8cc1Swenshuai.xi unsigned char startin; 233*53ee8cc1Swenshuai.xi unsigned char stopout; 234*53ee8cc1Swenshuai.xi unsigned char startout; 235*53ee8cc1Swenshuai.xi unsigned char parmark; 236*53ee8cc1Swenshuai.xi unsigned char brkmark; 237*53ee8cc1Swenshuai.xi unsigned char cc[11]; 238*53ee8cc1Swenshuai.xi } asyport_t; 239*53ee8cc1Swenshuai.xi 240*53ee8cc1Swenshuai.xi #define PT_STOP1 0x0 241*53ee8cc1Swenshuai.xi #define PT_STOP15 0x1 242*53ee8cc1Swenshuai.xi #define PT_STOP2 0x2 243*53ee8cc1Swenshuai.xi 244*53ee8cc1Swenshuai.xi #define PT_NOPARITY 0x0 245*53ee8cc1Swenshuai.xi #define PT_ODDPARITY 0x1 246*53ee8cc1Swenshuai.xi #define PT_EVENPARITY 0x2 247*53ee8cc1Swenshuai.xi #define PT_MARKPARITY 0x3 248*53ee8cc1Swenshuai.xi #define PT_SPACEPARITY 0x4 249*53ee8cc1Swenshuai.xi 250*53ee8cc1Swenshuai.xi #define F_NONE 0x0 251*53ee8cc1Swenshuai.xi #define F_IXON 0x1 252*53ee8cc1Swenshuai.xi #define F_IXOFF 0x2 253*53ee8cc1Swenshuai.xi #define F_IXANY 0x4 254*53ee8cc1Swenshuai.xi #define F_IOXANY 0x8 255*53ee8cc1Swenshuai.xi #define F_RTSFLOW 0x10 256*53ee8cc1Swenshuai.xi #define F_CTSFLOW 0x20 257*53ee8cc1Swenshuai.xi #define F_DTRFLOW 0x40 258*53ee8cc1Swenshuai.xi #define F_DCDFLOW 0x80 259*53ee8cc1Swenshuai.xi #define F_DSROFLOW 0x100 260*53ee8cc1Swenshuai.xi #define F_DSRIFLOW 0x200 261*53ee8cc1Swenshuai.xi 262*53ee8cc1Swenshuai.xi #define FI_NORX 0x1 263*53ee8cc1Swenshuai.xi #define FI_RAW 0x2 264*53ee8cc1Swenshuai.xi #define FI_ISTRIP 0x4 265*53ee8cc1Swenshuai.xi #define FI_UCLC 0x8 266*53ee8cc1Swenshuai.xi #define FI_INLCR 0x10 267*53ee8cc1Swenshuai.xi #define FI_ICRNL 0x20 268*53ee8cc1Swenshuai.xi #define FI_IGNCR 0x40 269*53ee8cc1Swenshuai.xi #define FI_IGNBREAK 0x80 270*53ee8cc1Swenshuai.xi #define FI_DSCRDBREAK 0x100 271*53ee8cc1Swenshuai.xi #define FI_1MARKBREAK 0x200 272*53ee8cc1Swenshuai.xi #define FI_2MARKBREAK 0x400 273*53ee8cc1Swenshuai.xi #define FI_XCHNGBREAK 0x800 274*53ee8cc1Swenshuai.xi #define FI_IGNRXERRS 0x1000 275*53ee8cc1Swenshuai.xi #define FI_DSCDRXERRS 0x2000 276*53ee8cc1Swenshuai.xi #define FI_1MARKRXERRS 0x4000 277*53ee8cc1Swenshuai.xi #define FI_2MARKRXERRS 0x8000 278*53ee8cc1Swenshuai.xi #define FI_XCHNGRXERRS 0x10000 279*53ee8cc1Swenshuai.xi #define FI_DSCRDNULL 0x20000 280*53ee8cc1Swenshuai.xi 281*53ee8cc1Swenshuai.xi #define FO_OLCUC 0x1 282*53ee8cc1Swenshuai.xi #define FO_ONLCR 0x2 283*53ee8cc1Swenshuai.xi #define FO_OOCRNL 0x4 284*53ee8cc1Swenshuai.xi #define FO_ONOCR 0x8 285*53ee8cc1Swenshuai.xi #define FO_ONLRET 0x10 286*53ee8cc1Swenshuai.xi #define FO_ONL 0x20 287*53ee8cc1Swenshuai.xi #define FO_OBS 0x40 288*53ee8cc1Swenshuai.xi #define FO_OVT 0x80 289*53ee8cc1Swenshuai.xi #define FO_OFF 0x100 290*53ee8cc1Swenshuai.xi #define FO_OTAB1 0x200 291*53ee8cc1Swenshuai.xi #define FO_OTAB2 0x400 292*53ee8cc1Swenshuai.xi #define FO_OTAB3 0x800 293*53ee8cc1Swenshuai.xi #define FO_OCR1 0x1000 294*53ee8cc1Swenshuai.xi #define FO_OCR2 0x2000 295*53ee8cc1Swenshuai.xi #define FO_OCR3 0x4000 296*53ee8cc1Swenshuai.xi #define FO_OFILL 0x8000 297*53ee8cc1Swenshuai.xi #define FO_ODELL 0x10000 298*53ee8cc1Swenshuai.xi 299*53ee8cc1Swenshuai.xi #define P_RTSLOCK 0x1 300*53ee8cc1Swenshuai.xi #define P_CTSLOCK 0x2 301*53ee8cc1Swenshuai.xi #define P_MAPRTS 0x4 302*53ee8cc1Swenshuai.xi #define P_MAPCTS 0x8 303*53ee8cc1Swenshuai.xi #define P_LOOPBACK 0x10 304*53ee8cc1Swenshuai.xi #define P_DTRFOLLOW 0x20 305*53ee8cc1Swenshuai.xi #define P_FAKEDCD 0x40 306*53ee8cc1Swenshuai.xi 307*53ee8cc1Swenshuai.xi #define P_RXIMIN 0x10000 308*53ee8cc1Swenshuai.xi #define P_RXITIME 0x20000 309*53ee8cc1Swenshuai.xi #define P_RXTHOLD 0x40000 310*53ee8cc1Swenshuai.xi 311*53ee8cc1Swenshuai.xi /* 312*53ee8cc1Swenshuai.xi * Define a structure to communicate serial port signal and data state 313*53ee8cc1Swenshuai.xi * information. 314*53ee8cc1Swenshuai.xi */ 315*53ee8cc1Swenshuai.xi typedef struct asysigs { 316*53ee8cc1Swenshuai.xi unsigned long data; 317*53ee8cc1Swenshuai.xi unsigned long signal; 318*53ee8cc1Swenshuai.xi unsigned long sigvalue; 319*53ee8cc1Swenshuai.xi } asysigs_t; 320*53ee8cc1Swenshuai.xi 321*53ee8cc1Swenshuai.xi #define DT_TXBUSY 0x1 322*53ee8cc1Swenshuai.xi #define DT_TXEMPTY 0x2 323*53ee8cc1Swenshuai.xi #define DT_TXLOW 0x4 324*53ee8cc1Swenshuai.xi #define DT_TXHIGH 0x8 325*53ee8cc1Swenshuai.xi #define DT_TXFULL 0x10 326*53ee8cc1Swenshuai.xi #define DT_TXHOG 0x20 327*53ee8cc1Swenshuai.xi #define DT_TXFLOWED 0x40 328*53ee8cc1Swenshuai.xi #define DT_TXBREAK 0x80 329*53ee8cc1Swenshuai.xi 330*53ee8cc1Swenshuai.xi #define DT_RXBUSY 0x100 331*53ee8cc1Swenshuai.xi #define DT_RXEMPTY 0x200 332*53ee8cc1Swenshuai.xi #define DT_RXLOW 0x400 333*53ee8cc1Swenshuai.xi #define DT_RXHIGH 0x800 334*53ee8cc1Swenshuai.xi #define DT_RXFULL 0x1000 335*53ee8cc1Swenshuai.xi #define DT_RXHOG 0x2000 336*53ee8cc1Swenshuai.xi #define DT_RXFLOWED 0x4000 337*53ee8cc1Swenshuai.xi #define DT_RXBREAK 0x8000 338*53ee8cc1Swenshuai.xi 339*53ee8cc1Swenshuai.xi #define SG_DTR 0x1 340*53ee8cc1Swenshuai.xi #define SG_DCD 0x2 341*53ee8cc1Swenshuai.xi #define SG_RTS 0x4 342*53ee8cc1Swenshuai.xi #define SG_CTS 0x8 343*53ee8cc1Swenshuai.xi #define SG_DSR 0x10 344*53ee8cc1Swenshuai.xi #define SG_RI 0x20 345*53ee8cc1Swenshuai.xi 346*53ee8cc1Swenshuai.xi /* 347*53ee8cc1Swenshuai.xi * Define the notification setting structure. This is used to tell the 348*53ee8cc1Swenshuai.xi * port what events we want to be informed about. Fields here use the 349*53ee8cc1Swenshuai.xi * same defines as for the asysigs structure above. 350*53ee8cc1Swenshuai.xi */ 351*53ee8cc1Swenshuai.xi typedef struct asynotify { 352*53ee8cc1Swenshuai.xi unsigned long ctrl; 353*53ee8cc1Swenshuai.xi unsigned long data; 354*53ee8cc1Swenshuai.xi unsigned long signal; 355*53ee8cc1Swenshuai.xi unsigned long sigvalue; 356*53ee8cc1Swenshuai.xi } asynotify_t; 357*53ee8cc1Swenshuai.xi 358*53ee8cc1Swenshuai.xi /* 359*53ee8cc1Swenshuai.xi * Define the port control structure. It is used to do fine grain 360*53ee8cc1Swenshuai.xi * control operations on the port. 361*53ee8cc1Swenshuai.xi */ 362*53ee8cc1Swenshuai.xi typedef struct { 363*53ee8cc1Swenshuai.xi unsigned long rxctrl; 364*53ee8cc1Swenshuai.xi unsigned long txctrl; 365*53ee8cc1Swenshuai.xi char rximdch; 366*53ee8cc1Swenshuai.xi char tximdch; 367*53ee8cc1Swenshuai.xi char spare1; 368*53ee8cc1Swenshuai.xi char spare2; 369*53ee8cc1Swenshuai.xi } asyctrl_t; 370*53ee8cc1Swenshuai.xi 371*53ee8cc1Swenshuai.xi #define CT_ENABLE 0x1 372*53ee8cc1Swenshuai.xi #define CT_DISABLE 0x2 373*53ee8cc1Swenshuai.xi #define CT_STOP 0x4 374*53ee8cc1Swenshuai.xi #define CT_START 0x8 375*53ee8cc1Swenshuai.xi #define CT_STARTFLOW 0x10 376*53ee8cc1Swenshuai.xi #define CT_STOPFLOW 0x20 377*53ee8cc1Swenshuai.xi #define CT_SENDCHR 0x40 378*53ee8cc1Swenshuai.xi 379*53ee8cc1Swenshuai.xi /* 380*53ee8cc1Swenshuai.xi * Define the stats structure kept for each port. This is a useful set 381*53ee8cc1Swenshuai.xi * of data collected for each port on the slave. The A_GETSTATS command 382*53ee8cc1Swenshuai.xi * is used to retrieve this data from the slave. 383*53ee8cc1Swenshuai.xi */ 384*53ee8cc1Swenshuai.xi typedef struct asystats { 385*53ee8cc1Swenshuai.xi unsigned long opens; 386*53ee8cc1Swenshuai.xi unsigned long txchars; 387*53ee8cc1Swenshuai.xi unsigned long rxchars; 388*53ee8cc1Swenshuai.xi unsigned long txringq; 389*53ee8cc1Swenshuai.xi unsigned long rxringq; 390*53ee8cc1Swenshuai.xi unsigned long txmsgs; 391*53ee8cc1Swenshuai.xi unsigned long rxmsgs; 392*53ee8cc1Swenshuai.xi unsigned long txflushes; 393*53ee8cc1Swenshuai.xi unsigned long rxflushes; 394*53ee8cc1Swenshuai.xi unsigned long overruns; 395*53ee8cc1Swenshuai.xi unsigned long framing; 396*53ee8cc1Swenshuai.xi unsigned long parity; 397*53ee8cc1Swenshuai.xi unsigned long ringover; 398*53ee8cc1Swenshuai.xi unsigned long lost; 399*53ee8cc1Swenshuai.xi unsigned long rxstart; 400*53ee8cc1Swenshuai.xi unsigned long rxstop; 401*53ee8cc1Swenshuai.xi unsigned long txstart; 402*53ee8cc1Swenshuai.xi unsigned long txstop; 403*53ee8cc1Swenshuai.xi unsigned long dcdcnt; 404*53ee8cc1Swenshuai.xi unsigned long dtrcnt; 405*53ee8cc1Swenshuai.xi unsigned long ctscnt; 406*53ee8cc1Swenshuai.xi unsigned long rtscnt; 407*53ee8cc1Swenshuai.xi unsigned long dsrcnt; 408*53ee8cc1Swenshuai.xi unsigned long ricnt; 409*53ee8cc1Swenshuai.xi unsigned long txbreaks; 410*53ee8cc1Swenshuai.xi unsigned long rxbreaks; 411*53ee8cc1Swenshuai.xi unsigned long signals; 412*53ee8cc1Swenshuai.xi unsigned long state; 413*53ee8cc1Swenshuai.xi unsigned long hwid; 414*53ee8cc1Swenshuai.xi } asystats_t; 415*53ee8cc1Swenshuai.xi 416*53ee8cc1Swenshuai.xi /*****************************************************************************/ 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xi /* 419*53ee8cc1Swenshuai.xi * All command and control communication with a device on the slave is 420*53ee8cc1Swenshuai.xi * via a control block in shared memory. Each device has its own control 421*53ee8cc1Swenshuai.xi * block, defined by the following structure. The control block allows 422*53ee8cc1Swenshuai.xi * the host to open, close and control the device on the slave. 423*53ee8cc1Swenshuai.xi */ 424*53ee8cc1Swenshuai.xi typedef struct cdkctrl { 425*53ee8cc1Swenshuai.xi unsigned char open; 426*53ee8cc1Swenshuai.xi unsigned char close; 427*53ee8cc1Swenshuai.xi unsigned long openarg; 428*53ee8cc1Swenshuai.xi unsigned long closearg; 429*53ee8cc1Swenshuai.xi unsigned long cmd; 430*53ee8cc1Swenshuai.xi unsigned long status; 431*53ee8cc1Swenshuai.xi unsigned long args[32]; 432*53ee8cc1Swenshuai.xi } cdkctrl_t; 433*53ee8cc1Swenshuai.xi 434*53ee8cc1Swenshuai.xi /* 435*53ee8cc1Swenshuai.xi * Each device on the slave passes data to and from the host via a ring 436*53ee8cc1Swenshuai.xi * queue in shared memory. Define a ring queue structure to hold the 437*53ee8cc1Swenshuai.xi * vital information about each ring queue. Two ring queues will be 438*53ee8cc1Swenshuai.xi * allocated for each port, one for receive data and one for transmit 439*53ee8cc1Swenshuai.xi * data. 440*53ee8cc1Swenshuai.xi */ 441*53ee8cc1Swenshuai.xi typedef struct cdkasyrq { 442*53ee8cc1Swenshuai.xi unsigned long offset; 443*53ee8cc1Swenshuai.xi unsigned short size; 444*53ee8cc1Swenshuai.xi unsigned short head; 445*53ee8cc1Swenshuai.xi unsigned short tail; 446*53ee8cc1Swenshuai.xi } cdkasyrq_t; 447*53ee8cc1Swenshuai.xi 448*53ee8cc1Swenshuai.xi /* 449*53ee8cc1Swenshuai.xi * Each asynchronous port is defined in shared memory by the following 450*53ee8cc1Swenshuai.xi * structure. It contains a control block to command a device, and also 451*53ee8cc1Swenshuai.xi * the necessary data channel information as well. 452*53ee8cc1Swenshuai.xi */ 453*53ee8cc1Swenshuai.xi typedef struct cdkasy { 454*53ee8cc1Swenshuai.xi cdkctrl_t ctrl; 455*53ee8cc1Swenshuai.xi unsigned short notify; 456*53ee8cc1Swenshuai.xi asynotify_t changed; 457*53ee8cc1Swenshuai.xi unsigned short receive; 458*53ee8cc1Swenshuai.xi cdkasyrq_t rxq; 459*53ee8cc1Swenshuai.xi unsigned short transmit; 460*53ee8cc1Swenshuai.xi cdkasyrq_t txq; 461*53ee8cc1Swenshuai.xi } cdkasy_t; 462*53ee8cc1Swenshuai.xi 463*53ee8cc1Swenshuai.xi #pragma pack() 464*53ee8cc1Swenshuai.xi 465*53ee8cc1Swenshuai.xi /*****************************************************************************/ 466*53ee8cc1Swenshuai.xi 467*53ee8cc1Swenshuai.xi /* 468*53ee8cc1Swenshuai.xi * Define the set of ioctls used by the driver to do special things 469*53ee8cc1Swenshuai.xi * to the board. These include interrupting it, and initializing 470*53ee8cc1Swenshuai.xi * the driver after board startup and shutdown. 471*53ee8cc1Swenshuai.xi */ 472*53ee8cc1Swenshuai.xi #include <linux/ioctl.h> 473*53ee8cc1Swenshuai.xi 474*53ee8cc1Swenshuai.xi #define STL_BINTR _IO('s',20) 475*53ee8cc1Swenshuai.xi #define STL_BSTART _IO('s',21) 476*53ee8cc1Swenshuai.xi #define STL_BSTOP _IO('s',22) 477*53ee8cc1Swenshuai.xi #define STL_BRESET _IO('s',23) 478*53ee8cc1Swenshuai.xi 479*53ee8cc1Swenshuai.xi /* 480*53ee8cc1Swenshuai.xi * Define a set of ioctl extensions, used to get at special stuff. 481*53ee8cc1Swenshuai.xi */ 482*53ee8cc1Swenshuai.xi #define STL_GETPFLAG _IO('s',80) 483*53ee8cc1Swenshuai.xi #define STL_SETPFLAG _IO('s',81) 484*53ee8cc1Swenshuai.xi 485*53ee8cc1Swenshuai.xi /*****************************************************************************/ 486*53ee8cc1Swenshuai.xi #endif 487