| 1 | |
| 2 | * linux/include/linux/cyclades.h
|
| 3 | *
|
| 4 | * This file was initially written by
|
| 5 | * Randolph Bentson <[email protected]> and is maintained by
|
| 6 | * Ivan Passos <[email protected]>.
|
| 7 | *
|
| 8 | * This file contains the general definitions for the cyclades.c driver
|
| 9 | *$Log: cyclades.h,v $
|
| 10 | *Revision 3.1 2002/01/29 11:36:16 henrique
|
| 11 | *added throttle field on struct cyclades_port to indicate whether the
|
| 12 | *port is throttled or not
|
| 13 | *
|
| 14 | *Revision 3.1 2000/04/19 18:52:52 ivan
|
| 15 | *converted address fields to unsigned long and added fields for physical
|
| 16 | *addresses on cyclades_card structure;
|
| 17 | *
|
| 18 | *Revision 3.0 1998/11/02 14:20:59 ivan
|
| 19 | *added nports field on cyclades_card structure;
|
| 20 | *
|
| 21 | *Revision 2.5 1998/08/03 16:57:01 ivan
|
| 22 | *added cyclades_idle_stats structure;
|
| 23 | *
|
| 24 | *Revision 2.4 1998/06/01 12:09:53 ivan
|
| 25 | *removed closing_wait2 from cyclades_port structure;
|
| 26 | *
|
| 27 | *Revision 2.3 1998/03/16 18:01:12 ivan
|
| 28 | *changes in the cyclades_port structure to get it closer to the
|
| 29 | *standard serial port structure;
|
| 30 | *added constants for new ioctls;
|
| 31 | *
|
| 32 | *Revision 2.2 1998/02/17 16:50:00 ivan
|
| 33 | *changes in the cyclades_port structure (addition of shutdown_wait and
|
| 34 | *chip_rev variables);
|
| 35 | *added constants for new ioctls and for CD1400 rev. numbers.
|
| 36 | *
|
| 37 | *Revision 2.1 1997/10/24 16:03:00 ivan
|
| 38 | *added rflow (which allows enabling the CD1400 special flow control
|
| 39 | *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to
|
| 40 | *cyclades_port structure;
|
| 41 | *added Alpha support
|
| 42 | *
|
| 43 | *Revision 2.0 1997/06/30 10:30:00 ivan
|
| 44 | *added some new doorbell command constants related to IOCTLW and
|
| 45 | *UART error signaling
|
| 46 | *
|
| 47 | *Revision 1.8 1997/06/03 15:30:00 ivan
|
| 48 | *added constant ZFIRM_HLT
|
| 49 | *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin)
|
| 50 | *
|
| 51 | *Revision 1.7 1997/03/26 10:30:00 daniel
|
| 52 | *new entries at the end of cyclades_port struct to reallocate
|
| 53 | *variables illegally allocated within card memory.
|
| 54 | *
|
| 55 | *Revision 1.6 1996/09/09 18:35:30 bentson
|
| 56 | *fold in changes for Cyclom-Z -- including structures for
|
| 57 | *communicating with board as well modest changes to original
|
| 58 | *structures to support new features.
|
| 59 | *
|
| 60 | *Revision 1.5 1995/11/13 21:13:31 bentson
|
| 61 | *changes suggested by Michael Chastain <[email protected]>
|
| 62 | *to support use of this file in non-kernel applications
|
| 63 | *
|
| 64 | *
|
| 65 |
|
| 66 |
|
| 67 | #ifndef _LINUX_CYCLADES_H
|
| 68 | #define _LINUX_CYCLADES_H
|
| 69 |
|
| 70 | struct cyclades_monitor {
|
| 71 | unsigned long int_count;
|
| 72 | unsigned long char_count;
|
| 73 | unsigned long char_max;
|
| 74 | unsigned long char_last;
|
| 75 | };
|
| 76 |
|
| 77 | |
| 78 | * These stats all reflect activity since the device was last initialized.
|
| 79 | * (i.e., since the port was opened with no other processes already having it
|
| 80 | * open)
|
| 81 |
|
| 82 | struct cyclades_idle_stats {
|
| 83 | time_t in_use;
|
| 84 | time_t recv_idle;
|
| 85 | time_t xmit_idle;
|
| 86 | unsigned long recv_bytes;
|
| 87 | unsigned long xmit_bytes;
|
| 88 | unsigned long overruns;
|
| 89 | unsigned long frame_errs;
|
| 90 | unsigned long parity_errs;
|
| 91 | };
|
| 92 |
|
| 93 | #define CYCLADES_MAGIC 0x4359
|
| 94 |
|
| 95 | #define CYGETMON 0x435901
|
| 96 | #define CYGETTHRESH 0x435902
|
| 97 | #define CYSETTHRESH 0x435903
|
| 98 | #define CYGETDEFTHRESH 0x435904
|
| 99 | #define CYSETDEFTHRESH 0x435905
|
| 100 | #define CYGETTIMEOUT 0x435906
|
| 101 | #define CYSETTIMEOUT 0x435907
|
| 102 | #define CYGETDEFTIMEOUT 0x435908
|
| 103 | #define CYSETDEFTIMEOUT 0x435909
|
| 104 | #define CYSETRFLOW 0x43590a
|
| 105 | #define CYGETRFLOW 0x43590b
|
| 106 | #define CYSETRTSDTR_INV 0x43590c
|
| 107 | #define CYGETRTSDTR_INV 0x43590d
|
| 108 | #define CYZSETPOLLCYCLE 0x43590e
|
| 109 | #define CYZGETPOLLCYCLE 0x43590f
|
| 110 | #define CYGETCD1400VER 0x435910
|
| 111 | #define CYGETCARDINFO 0x435911
|
| 112 | #define CYSETWAIT 0x435912
|
| 113 | #define CYGETWAIT 0x435913
|
| 114 |
|
| 115 |
|
| 116 |
|
| 117 | #define CZIOC ('M' << 8)
|
| 118 | #define CZ_NBOARDS (CZIOC|0xfa)
|
| 119 | #define CZ_BOOT_START (CZIOC|0xfb)
|
| 120 | #define CZ_BOOT_DATA (CZIOC|0xfc)
|
| 121 | #define CZ_BOOT_END (CZIOC|0xfd)
|
| 122 | #define CZ_TEST (CZIOC|0xfe)
|
| 123 |
|
| 124 | #define CZ_DEF_POLL (HZ/25)
|
| 125 |
|
| 126 | #define MAX_BOARD 4
|
| 127 | #define MAX_DEV 256
|
| 128 | #define CYZ_MAX_SPEED 921600
|
| 129 |
|
| 130 | #define CYZ_FIFO_SIZE 16
|
| 131 |
|
| 132 | #define CYZ_BOOT_NWORDS 0x100
|
| 133 | struct CYZ_BOOT_CTRL {
|
| 134 | unsigned short nboard;
|
| 135 | int status[MAX_BOARD];
|
| 136 | int nchannel[MAX_BOARD];
|
| 137 | int fw_rev[MAX_BOARD];
|
| 138 | unsigned long offset;
|
| 139 | unsigned long data[CYZ_BOOT_NWORDS];
|
| 140 | };
|
| 141 |
|
| 142 |
|
| 143 | #ifndef DP_WINDOW_SIZE
|
| 144 |
|
| 145 |
|
| 146 | |
| 147 | * The data types defined below are used in all ZFIRM interface
|
| 148 | * data structures. They accomodate differences between HW
|
| 149 | * architectures and compilers.
|
| 150 |
|
| 151 |
|
| 152 | #if defined(__alpha__)
|
| 153 | typedef unsigned long ucdouble;
|
| 154 | typedef unsigned int uclong;
|
| 155 | #else
|
| 156 | typedef unsigned long uclong;
|
| 157 | #endif
|
| 158 | typedef unsigned short ucshort;
|
| 159 | typedef unsigned char ucchar;
|
| 160 |
|
| 161 | |
| 162 | * Memory Window Sizes
|
| 163 |
|
| 164 |
|
| 165 | #define DP_WINDOW_SIZE (0x00080000)
|
| 166 | #define ZE_DP_WINDOW_SIZE (0x00100000) |
| 167 | 8Zo V.2
|
| 168 | #define CTRL_WINDOW_SIZE (0x00000080)
|
| 169 |
|
| 170 | |
| 171 | * CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver
|
| 172 | * normally will access only interested on the fpga_id, fpga_version,
|
| 173 | * start_cpu and stop_cpu.
|
| 174 |
|
| 175 |
|
| 176 | struct CUSTOM_REG {
|
| 177 | uclong fpga_id;
|
| 178 | uclong fpga_version;
|
| 179 | uclong cpu_start;
|
| 180 | uclong cpu_stop;
|
| 181 | uclong misc_reg;
|
| 182 | uclong idt_mode;
|
| 183 | uclong uart_irq_status;
|
| 184 | uclong clear_timer0_irq;
|
| 185 | uclong clear_timer1_irq;
|
| 186 | uclong clear_timer2_irq;
|
| 187 | uclong test_register;
|
| 188 | uclong test_count;
|
| 189 | uclong timer_select;
|
| 190 | uclong pr_uart_irq_status;
|
| 191 | uclong ram_wait_state;
|
| 192 | uclong uart_wait_state;
|
| 193 | uclong timer_wait_state;
|
| 194 | uclong ack_wait_state;
|
| 195 | };
|
| 196 |
|
| 197 | |
| 198 | * RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime
|
| 199 | * registers. This structure can be used to access the 9060 registers
|
| 200 | * (memory mapped).
|
| 201 |
|
| 202 |
|
| 203 | struct RUNTIME_9060 {
|
| 204 | uclong loc_addr_range;
|
| 205 | uclong loc_addr_base;
|
| 206 | uclong loc_arbitr;
|
| 207 | uclong endian_descr;
|
| 208 | uclong loc_rom_range;
|
| 209 | uclong loc_rom_base;
|
| 210 | uclong loc_bus_descr;
|
| 211 | uclong loc_range_mst;
|
| 212 | uclong loc_base_mst;
|
| 213 | uclong loc_range_io;
|
| 214 | uclong pci_base_mst;
|
| 215 | uclong pci_conf_io;
|
| 216 | uclong filler1;
|
| 217 | uclong filler2;
|
| 218 | uclong filler3;
|
| 219 | uclong filler4;
|
| 220 | uclong mail_box_0;
|
| 221 | uclong mail_box_1;
|
| 222 | uclong mail_box_2;
|
| 223 | uclong mail_box_3;
|
| 224 | uclong filler5;
|
| 225 | uclong filler6;
|
| 226 | uclong filler7;
|
| 227 | uclong filler8;
|
| 228 | uclong pci_doorbell;
|
| 229 | uclong loc_doorbell;
|
| 230 | uclong intr_ctrl_stat;
|
| 231 | uclong init_ctrl;
|
| 232 | };
|
| 233 |
|
| 234 |
|
| 235 |
|
| 236 | #define WIN_RAM 0x00000001L
|
| 237 | #define WIN_CREG 0x14000001L
|
| 238 |
|
| 239 |
|
| 240 |
|
| 241 | #define TIMER_BY_1M 0x00
|
| 242 | #define TIMER_BY_256K 0x01
|
| 243 | #define TIMER_BY_128K 0x02
|
| 244 | #define TIMER_BY_32K 0x03
|
| 245 |
|
| 246 |
|
| 247 | #endif
|
| 248 |
|
| 249 | #ifndef ZFIRM_ID
|
| 250 |
|
| 251 |
|
| 252 | |
| 253 | * This file contains the definitions for interfacing with the
|
| 254 | * Cyclom-Z ZFIRM Firmware.
|
| 255 |
|
| 256 |
|
| 257 |
|
| 258 |
|
| 259 | #define MAX_CHAN 64
|
| 260 |
|
| 261 |
|
| 262 |
|
| 263 | #define ID_ADDRESS 0x00000180L
|
| 264 | #define ZFIRM_ID 0x5557465AL
|
| 265 | #define ZFIRM_HLT 0x59505B5CL
|
| 266 | #define ZFIRM_RST 0x56040674L
|
| 267 |
|
| 268 | #define ZF_TINACT_DEF 1000 |
| 269 | (1000 ms)
|
| 270 | #define ZF_TINACT ZF_TINACT_DEF
|
| 271 |
|
| 272 | struct FIRM_ID {
|
| 273 | uclong signature;
|
| 274 | uclong zfwctrl_addr;
|
| 275 | };
|
| 276 |
|
| 277 |
|
| 278 |
|
| 279 | #define C_OS_LINUX 0x00000030
|
| 280 |
|
| 281 |
|
| 282 |
|
| 283 | #define C_CH_DISABLE 0x00000000
|
| 284 | #define C_CH_TXENABLE 0x00000001
|
| 285 | #define C_CH_RXENABLE 0x00000002
|
| 286 | #define C_CH_ENABLE 0x00000003
|
| 287 | #define C_CH_LOOPBACK 0x00000004
|
| 288 |
|
| 289 |
|
| 290 |
|
| 291 | #define C_PR_NONE 0x00000000
|
| 292 | #define C_PR_ODD 0x00000001
|
| 293 | #define C_PR_EVEN 0x00000002
|
| 294 | #define C_PR_MARK 0x00000004
|
| 295 | #define C_PR_SPACE 0x00000008
|
| 296 | #define C_PR_PARITY 0x000000ff
|
| 297 |
|
| 298 | #define C_PR_DISCARD 0x00000100
|
| 299 | #define C_PR_IGNORE 0x00000200
|
| 300 |
|
| 301 |
|
| 302 |
|
| 303 | #define C_DL_CS5 0x00000001
|
| 304 | #define C_DL_CS6 0x00000002
|
| 305 | #define C_DL_CS7 0x00000004
|
| 306 | #define C_DL_CS8 0x00000008
|
| 307 | #define C_DL_CS 0x0000000f
|
| 308 | #define C_DL_1STOP 0x00000010
|
| 309 | #define C_DL_15STOP 0x00000020
|
| 310 | #define C_DL_2STOP 0x00000040
|
| 311 | #define C_DL_STOP 0x000000f0
|
| 312 |
|
| 313 |
|
| 314 |
|
| 315 | #define C_IN_DISABLE 0x00000000
|
| 316 | #define C_IN_TXBEMPTY 0x00000001
|
| 317 | #define C_IN_TXLOWWM 0x00000002
|
| 318 | #define C_IN_RXHIWM 0x00000010
|
| 319 | #define C_IN_RXNNDT 0x00000020
|
| 320 | #define C_IN_MDCD 0x00000100
|
| 321 | #define C_IN_MDSR 0x00000200
|
| 322 | #define C_IN_MRI 0x00000400
|
| 323 | #define C_IN_MCTS 0x00000800
|
| 324 | #define C_IN_RXBRK 0x00001000
|
| 325 | #define C_IN_PR_ERROR 0x00002000
|
| 326 | #define C_IN_FR_ERROR 0x00004000
|
| 327 | #define C_IN_OVR_ERROR 0x00008000
|
| 328 | #define C_IN_RXOFL 0x00010000
|
| 329 | #define C_IN_IOCTLW 0x00020000
|
| 330 | #define C_IN_MRTS 0x00040000
|
| 331 | #define C_IN_ICHAR 0x00080000
|
| 332 |
|
| 333 |
|
| 334 |
|
| 335 | #define C_FL_OXX 0x00000001
|
| 336 | #define C_FL_IXX 0x00000002
|
| 337 | #define C_FL_OIXANY 0x00000004
|
| 338 | #define C_FL_SWFLOW 0x0000000f
|
| 339 |
|
| 340 |
|
| 341 |
|
| 342 | #define C_FS_TXIDLE 0x00000000
|
| 343 | #define C_FS_SENDING 0x00000001
|
| 344 | #define C_FS_SWFLOW 0x00000002
|
| 345 |
|
| 346 |
|
| 347 |
|
| 348 | #define C_RS_PARAM 0x80000000 |
| 349 | IOCTLM command
|
| 350 | #define C_RS_RTS 0x00000001
|
| 351 | #define C_RS_DTR 0x00000004
|
| 352 | #define C_RS_DCD 0x00000100
|
| 353 | #define C_RS_DSR 0x00000200
|
| 354 | #define C_RS_RI 0x00000400
|
| 355 | #define C_RS_CTS 0x00000800
|
| 356 |
|
| 357 |
|
| 358 |
|
| 359 | #define C_CM_RESET 0x01
|
| 360 | #define C_CM_IOCTL 0x02
|
| 361 | #define C_CM_IOCTLW 0x03
|
| 362 | #define C_CM_IOCTLM 0x04
|
| 363 | #define C_CM_SENDXOFF 0x10
|
| 364 | #define C_CM_SENDXON 0x11
|
| 365 | #define C_CM_CLFLOW 0x12
|
| 366 | #define C_CM_SENDBRK 0x41
|
| 367 | #define C_CM_INTBACK 0x42
|
| 368 | #define C_CM_SET_BREAK 0x43
|
| 369 | #define C_CM_CLR_BREAK 0x44
|
| 370 | #define C_CM_CMD_DONE 0x45
|
| 371 | #define C_CM_INTBACK2 0x46
|
| 372 | #define C_CM_TINACT 0x51
|
| 373 | #define C_CM_IRQ_ENBL 0x52
|
| 374 | #define C_CM_IRQ_DSBL 0x53
|
| 375 | #define C_CM_ACK_ENBL 0x54
|
| 376 | #define C_CM_ACK_DSBL 0x55
|
| 377 | #define C_CM_FLUSH_RX 0x56
|
| 378 | #define C_CM_FLUSH_TX 0x57
|
| 379 | #define C_CM_Q_ENABLE 0x58 |
| 380 | driver
|
| 381 | #define C_CM_Q_DISABLE 0x59 |
| 382 | driver
|
| 383 |
|
| 384 | #define C_CM_TXBEMPTY 0x60
|
| 385 | #define C_CM_TXLOWWM 0x61
|
| 386 | #define C_CM_RXHIWM 0x62
|
| 387 | #define C_CM_RXNNDT 0x63
|
| 388 | #define C_CM_TXFEMPTY 0x64
|
| 389 | #define C_CM_ICHAR 0x65
|
| 390 | #define C_CM_MDCD 0x70
|
| 391 | #define C_CM_MDSR 0x71
|
| 392 | #define C_CM_MRI 0x72
|
| 393 | #define C_CM_MCTS 0x73
|
| 394 | #define C_CM_MRTS 0x74
|
| 395 | #define C_CM_RXBRK 0x84
|
| 396 | #define C_CM_PR_ERROR 0x85
|
| 397 | #define C_CM_FR_ERROR 0x86
|
| 398 | #define C_CM_OVR_ERROR 0x87
|
| 399 | #define C_CM_RXOFL 0x88
|
| 400 | #define C_CM_CMDERROR 0x90
|
| 401 | #define C_CM_FATAL 0x91
|
| 402 | #define C_CM_HW_RESET 0x92
|
| 403 |
|
| 404 | |
| 405 | * CH_CTRL - This per port structure contains all parameters
|
| 406 | * that control an specific port. It can be seen as the
|
| 407 | * configuration registers of a "super-serial-controller".
|
| 408 |
|
| 409 |
|
| 410 | struct CH_CTRL {
|
| 411 | uclong op_mode;
|
| 412 | uclong intr_enable;
|
| 413 | uclong sw_flow;
|
| 414 | uclong flow_status;
|
| 415 | uclong comm_baud;
|
| 416 | uclong comm_parity;
|
| 417 | uclong comm_data_l;
|
| 418 | uclong comm_flags;
|
| 419 | uclong hw_flow;
|
| 420 | uclong rs_control;
|
| 421 | uclong rs_status;
|
| 422 | uclong flow_xon;
|
| 423 | uclong flow_xoff;
|
| 424 | uclong hw_overflow;
|
| 425 | uclong sw_overflow;
|
| 426 | uclong comm_error;
|
| 427 | uclong ichar;
|
| 428 | uclong filler[7];
|
| 429 | };
|
| 430 |
|
| 431 |
|
| 432 | |
| 433 | * BUF_CTRL - This per channel structure contains
|
| 434 | * all Tx and Rx buffer control for a given channel.
|
| 435 |
|
| 436 |
|
| 437 | struct BUF_CTRL {
|
| 438 | uclong flag_dma;
|
| 439 | uclong tx_bufaddr;
|
| 440 | uclong tx_bufsize;
|
| 441 | uclong tx_threshold;
|
| 442 | uclong tx_get;
|
| 443 | uclong tx_put;
|
| 444 | uclong rx_bufaddr;
|
| 445 | uclong rx_bufsize;
|
| 446 | uclong rx_threshold;
|
| 447 | uclong rx_get;
|
| 448 | uclong rx_put;
|
| 449 | uclong filler[5];
|
| 450 | };
|
| 451 |
|
| 452 | |
| 453 | * BOARD_CTRL - This per board structure contains all global
|
| 454 | * control fields related to the board.
|
| 455 |
|
| 456 |
|
| 457 | struct BOARD_CTRL {
|
| 458 |
|
| 459 |
|
| 460 | uclong n_channel;
|
| 461 | uclong fw_version;
|
| 462 |
|
| 463 |
|
| 464 | uclong op_system;
|
| 465 | uclong dr_version;
|
| 466 |
|
| 467 |
|
| 468 | uclong inactivity;
|
| 469 |
|
| 470 |
|
| 471 | uclong hcmd_channel;
|
| 472 | uclong hcmd_param;
|
| 473 |
|
| 474 |
|
| 475 | uclong fwcmd_channel;
|
| 476 | uclong fwcmd_param;
|
| 477 | uclong zf_int_queue_addr;
|
| 478 |
|
| 479 |
|
| 480 | uclong filler[6];
|
| 481 | };
|
| 482 |
|
| 483 |
|
| 484 |
|
| 485 | #define QUEUE_SIZE (10*MAX_CHAN)
|
| 486 |
|
| 487 | struct INT_QUEUE {
|
| 488 | unsigned char intr_code[QUEUE_SIZE];
|
| 489 | unsigned long channel[QUEUE_SIZE];
|
| 490 | unsigned long param[QUEUE_SIZE];
|
| 491 | unsigned long put;
|
| 492 | unsigned long get;
|
| 493 | };
|
| 494 |
|
| 495 | |
| 496 | * ZFW_CTRL - This is the data structure that includes all other
|
| 497 | * data structures used by the Firmware.
|
| 498 |
|
| 499 |
|
| 500 | struct ZFW_CTRL {
|
| 501 | struct BOARD_CTRL board_ctrl;
|
| 502 | struct CH_CTRL ch_ctrl[MAX_CHAN];
|
| 503 | struct BUF_CTRL buf_ctrl[MAX_CHAN];
|
| 504 | };
|
| 505 |
|
| 506 |
|
| 507 | #endif
|
| 508 |
|
| 509 |
|
| 510 | struct resource;
|
| 511 | struct cyclades_card {
|
| 512 | unsigned long base_phys;
|
| 513 | unsigned long ctl_phys;
|
| 514 | void __iomem *base_addr;
|
| 515 | void __iomem *ctl_addr;
|
| 516 | int irq;
|
| 517 | int num_chips;
|
| 518 | int first_line;
|
| 519 | int nports;
|
| 520 | int bus_index;
|
| 521 | int intr_enabled;
|
| 522 | struct pci_dev *pdev;
|
| 523 | #ifdef __KERNEL__
|
| 524 | spinlock_t card_lock;
|
| 525 | #else
|
| 526 | unsigned long filler;
|
| 527 | #endif
|
| 528 | };
|
| 529 |
|
| 530 | struct cyclades_chip {
|
| 531 | int filler;
|
| 532 | };
|
| 533 |
|
| 534 |
|
| 535 | #ifdef __KERNEL__
|
| 536 |
|
| 537 | |
| 538 | * Memory access functions/macros *
|
| 539 | * (required to support Alpha systems) *
|
| 540 | **************************************
|
| 541 |
|
| 542 | #define cy_writeb(port,val) {writeb((val),(port)); mb();}
|
| 543 | #define cy_writew(port,val) {writew((val),(port)); mb();}
|
| 544 | #define cy_writel(port,val) {writel((val),(port)); mb();}
|
| 545 |
|
| 546 | #define cy_readb(port) readb(port)
|
| 547 | #define cy_readw(port) readw(port)
|
| 548 | #define cy_readl(port) readl(port)
|
| 549 |
|
| 550 | |
| 551 | * Statistics counters
|
| 552 |
|
| 553 | struct cyclades_icount {
|
| 554 | __u32 cts, dsr, rng, dcd, tx, rx;
|
| 555 | __u32 frame, parity, overrun, brk;
|
| 556 | __u32 buf_overrun;
|
| 557 | };
|
| 558 |
|
| 559 | |
| 560 | * This is our internal structure for each serial port's state.
|
| 561 | *
|
| 562 | * Many fields are paralleled by the structure used by the serial_struct
|
| 563 | * structure.
|
| 564 | *
|
| 565 | * For definitions of the flags field, see tty.h
|
| 566 |
|
| 567 |
|
| 568 | struct cyclades_port {
|
| 569 | int magic;
|
| 570 | int card;
|
| 571 | int line;
|
| 572 | int flags;
|
| 573 | int type;
|
| 574 | struct tty_struct *tty;
|
| 575 | int read_status_mask;
|
| 576 | int ignore_status_mask;
|
| 577 | int timeout;
|
| 578 | int xmit_fifo_size;
|
| 579 | int cor1,cor2,cor3,cor4,cor5;
|
| 580 | int tbpr,tco,rbpr,rco;
|
| 581 | int baud;
|
| 582 | int rflow;
|
| 583 | int rtsdtr_inv;
|
| 584 | int chip_rev;
|
| 585 | int custom_divisor;
|
| 586 | int x_char;
|
| 587 | int close_delay;
|
| 588 | unsigned short closing_wait;
|
| 589 | unsigned long event;
|
| 590 | unsigned long last_active;
|
| 591 | int count;
|
| 592 | int breakon;
|
| 593 | int breakoff;
|
| 594 | int blocked_open;
|
| 595 | unsigned char *xmit_buf;
|
| 596 | int xmit_head;
|
| 597 | int xmit_tail;
|
| 598 | int xmit_cnt;
|
| 599 | int default_threshold;
|
| 600 | int default_timeout;
|
| 601 | unsigned long jiffies[3];
|
| 602 | unsigned long rflush_count;
|
| 603 | struct cyclades_monitor mon;
|
| 604 | struct cyclades_idle_stats idle_stats;
|
| 605 | struct cyclades_icount icount;
|
| 606 | struct work_struct tqueue;
|
| 607 | wait_queue_head_t open_wait;
|
| 608 | wait_queue_head_t close_wait;
|
| 609 | wait_queue_head_t shutdown_wait;
|
| 610 | wait_queue_head_t delta_msr_wait;
|
| 611 | int throttle;
|
| 612 | };
|
| 613 |
|
| 614 | |
| 615 | * Events are used to schedule things to happen at timer-interrupt
|
| 616 | * time, instead of at cy interrupt time.
|
| 617 |
|
| 618 | #define Cy_EVENT_READ_PROCESS 0
|
| 619 | #define Cy_EVENT_WRITE_WAKEUP 1
|
| 620 | #define Cy_EVENT_HANGUP 2
|
| 621 | #define Cy_EVENT_BREAK 3
|
| 622 | #define Cy_EVENT_OPEN_WAKEUP 4
|
| 623 | #define Cy_EVENT_SHUTDOWN_WAKEUP 5
|
| 624 | #define Cy_EVENT_DELTA_WAKEUP 6
|
| 625 | #define Cy_EVENT_Z_RX_FULL 7
|
| 626 |
|
| 627 | #define CLOSING_WAIT_DELAY 30*HZ
|
| 628 | #define CY_CLOSING_WAIT_NONE 65535
|
| 629 | #define CY_CLOSING_WAIT_INF 0
|
| 630 |
|
| 631 |
|
| 632 | #define CyMAX_CHIPS_PER_CARD 8
|
| 633 | #define CyMAX_CHAR_FIFO 12
|
| 634 | #define CyPORTS_PER_CHIP 4
|
| 635 | #define CD1400_MAX_SPEED 115200
|
| 636 |
|
| 637 | #define CyISA_Ywin 0x2000
|
| 638 |
|
| 639 | #define CyPCI_Ywin 0x4000
|
| 640 | #define CyPCI_Yctl 0x80
|
| 641 | #define CyPCI_Zctl CTRL_WINDOW_SIZE
|
| 642 | #define CyPCI_Zwin 0x80000
|
| 643 | #define CyPCI_Ze_win (2 * CyPCI_Zwin)
|
| 644 |
|
| 645 | #define PCI_DEVICE_ID_MASK 0x06
|
| 646 |
|
| 647 |
|
| 648 |
|
| 649 | #define CD1400_REV_G 0x46
|
| 650 | #define CD1400_REV_J 0x48
|
| 651 |
|
| 652 | #define CyRegSize 0x0400
|
| 653 | #define Cy_HwReset 0x1400
|
| 654 | #define Cy_ClrIntr 0x1800
|
| 655 | #define Cy_EpldRev 0x1e00
|
| 656 |
|
| 657 |
|
| 658 |
|
| 659 | #define CyGFRCR (0x40*2)
|
| 660 | #define CyRevE (44)
|
| 661 | #define CyCAR (0x68*2)
|
| 662 | #define CyCHAN_0 (0x00)
|
| 663 | #define CyCHAN_1 (0x01)
|
| 664 | #define CyCHAN_2 (0x02)
|
| 665 | #define CyCHAN_3 (0x03)
|
| 666 | #define CyGCR (0x4B*2)
|
| 667 | #define CyCH0_SERIAL (0x00)
|
| 668 | #define CyCH0_PARALLEL (0x80)
|
| 669 | #define CySVRR (0x67*2)
|
| 670 | #define CySRModem (0x04)
|
| 671 | #define CySRTransmit (0x02)
|
| 672 | #define CySRReceive (0x01)
|
| 673 | #define CyRICR (0x44*2)
|
| 674 | #define CyTICR (0x45*2)
|
| 675 | #define CyMICR (0x46*2)
|
| 676 | #define CyICR0 (0x00)
|
| 677 | #define CyICR1 (0x01)
|
| 678 | #define CyICR2 (0x02)
|
| 679 | #define CyICR3 (0x03)
|
| 680 | #define CyRIR (0x6B*2)
|
| 681 | #define CyTIR (0x6A*2)
|
| 682 | #define CyMIR (0x69*2)
|
| 683 | #define CyIRDirEq (0x80)
|
| 684 | #define CyIRBusy (0x40)
|
| 685 | #define CyIRUnfair (0x20)
|
| 686 | #define CyIRContext (0x1C)
|
| 687 | #define CyIRChannel (0x03)
|
| 688 | #define CyPPR (0x7E*2)
|
| 689 | #define CyCLOCK_20_1MS (0x27)
|
| 690 | #define CyCLOCK_25_1MS (0x31)
|
| 691 | #define CyCLOCK_25_5MS (0xf4)
|
| 692 | #define CyCLOCK_60_1MS (0x75)
|
| 693 | #define CyCLOCK_60_2MS (0xea)
|
| 694 |
|
| 695 |
|
| 696 |
|
| 697 | #define CyRIVR (0x43*2)
|
| 698 | #define CyTIVR (0x42*2)
|
| 699 | #define CyMIVR (0x41*2)
|
| 700 | #define CyIVRMask (0x07)
|
| 701 | #define CyIVRRxEx (0x07)
|
| 702 | #define CyIVRRxOK (0x03)
|
| 703 | #define CyIVRTxOK (0x02)
|
| 704 | #define CyIVRMdmOK (0x01)
|
| 705 | #define CyTDR (0x63*2)
|
| 706 | #define CyRDSR (0x62*2)
|
| 707 | #define CyTIMEOUT (0x80)
|
| 708 | #define CySPECHAR (0x70)
|
| 709 | #define CyBREAK (0x08)
|
| 710 | #define CyPARITY (0x04)
|
| 711 | #define CyFRAME (0x02)
|
| 712 | #define CyOVERRUN (0x01)
|
| 713 | #define CyMISR (0x4C*2)
|
| 714 |
|
| 715 | #define CyEOSRR (0x60*2)
|
| 716 |
|
| 717 |
|
| 718 |
|
| 719 | #define CyLIVR (0x18*2)
|
| 720 | #define CyMscsr (0x01)
|
| 721 | #define CyTdsr (0x02)
|
| 722 | #define CyRgdsr (0x03)
|
| 723 | #define CyRedsr (0x07)
|
| 724 | #define CyCCR (0x05*2)
|
| 725 |
|
| 726 | #define CyCHAN_RESET (0x80)
|
| 727 | #define CyCHIP_RESET (0x81)
|
| 728 | #define CyFlushTransFIFO (0x82)
|
| 729 |
|
| 730 | #define CyCOR_CHANGE (0x40)
|
| 731 | #define CyCOR1ch (0x02)
|
| 732 | #define CyCOR2ch (0x04)
|
| 733 | #define CyCOR3ch (0x08)
|
| 734 |
|
| 735 | #define CySEND_SPEC_1 (0x21)
|
| 736 | #define CySEND_SPEC_2 (0x22)
|
| 737 | #define CySEND_SPEC_3 (0x23)
|
| 738 | #define CySEND_SPEC_4 (0x24)
|
| 739 |
|
| 740 | #define CyCHAN_CTL (0x10)
|
| 741 | #define CyDIS_RCVR (0x01)
|
| 742 | #define CyENB_RCVR (0x02)
|
| 743 | #define CyDIS_XMTR (0x04)
|
| 744 | #define CyENB_XMTR (0x08)
|
| 745 | #define CySRER (0x06*2)
|
| 746 | #define CyMdmCh (0x80)
|
| 747 | #define CyRxData (0x10)
|
| 748 | #define CyTxRdy (0x04)
|
| 749 | #define CyTxMpty (0x02)
|
| 750 | #define CyNNDT (0x01)
|
| 751 | #define CyCOR1 (0x08*2)
|
| 752 | #define CyPARITY_NONE (0x00)
|
| 753 | #define CyPARITY_0 (0x20)
|
| 754 | #define CyPARITY_1 (0xA0)
|
| 755 | #define CyPARITY_E (0x40)
|
| 756 | #define CyPARITY_O (0xC0)
|
| 757 | #define Cy_1_STOP (0x00)
|
| 758 | #define Cy_1_5_STOP (0x04)
|
| 759 | #define Cy_2_STOP (0x08)
|
| 760 | #define Cy_5_BITS (0x00)
|
| 761 | #define Cy_6_BITS (0x01)
|
| 762 | #define Cy_7_BITS (0x02)
|
| 763 | #define Cy_8_BITS (0x03)
|
| 764 | #define CyCOR2 (0x09*2)
|
| 765 | #define CyIXM (0x80)
|
| 766 | #define CyTxIBE (0x40)
|
| 767 | #define CyETC (0x20)
|
| 768 | #define CyAUTO_TXFL (0x60)
|
| 769 | #define CyLLM (0x10)
|
| 770 | #define CyRLM (0x08)
|
| 771 | #define CyRtsAO (0x04)
|
| 772 | #define CyCtsAE (0x02)
|
| 773 | #define CyDsrAE (0x01)
|
| 774 | #define CyCOR3 (0x0A*2)
|
| 775 | #define CySPL_CH_DRANGE (0x80)
|
| 776 | #define CySPL_CH_DET1 (0x40) |
| 777 | on SCHR4-SCHR3
|
| 778 | #define CyFL_CTRL_TRNSP (0x20)
|
| 779 | #define CySPL_CH_DET2 (0x10) |
| 780 | on SCHR2-SCHR1
|
| 781 | #define CyREC_FIFO (0x0F)
|
| 782 | #define CyCOR4 (0x1E*2)
|
| 783 | #define CyCOR5 (0x1F*2)
|
| 784 | #define CyCCSR (0x0B*2)
|
| 785 | #define CyRxEN (0x80)
|
| 786 | #define CyRxFloff (0x40)
|
| 787 | #define CyRxFlon (0x20)
|
| 788 | #define CyTxEN (0x08)
|
| 789 | #define CyTxFloff (0x04)
|
| 790 | #define CyTxFlon (0x02)
|
| 791 | #define CyRDCR (0x0E*2)
|
| 792 | #define CySCHR1 (0x1A*2)
|
| 793 | #define CySCHR2 (0x1B*2)
|
| 794 | #define CySCHR3 (0x1C*2)
|
| 795 | #define CySCHR4 (0x1D*2)
|
| 796 | #define CySCRL (0x22*2)
|
| 797 | #define CySCRH (0x23*2)
|
| 798 | #define CyLNC (0x24*2)
|
| 799 | #define CyMCOR1 (0x15*2)
|
| 800 | #define CyMCOR2 (0x16*2)
|
| 801 | #define CyRTPR (0x21*2)
|
| 802 | #define CyMSVR1 (0x6C*2)
|
| 803 | #define CyMSVR2 (0x6D*2)
|
| 804 | #define CyANY_DELTA (0xF0)
|
| 805 | #define CyDSR (0x80)
|
| 806 | #define CyCTS (0x40)
|
| 807 | #define CyRI (0x20)
|
| 808 | #define CyDCD (0x10)
|
| 809 | #define CyDTR (0x02)
|
| 810 | #define CyRTS (0x01)
|
| 811 | #define CyPVSR (0x6F*2)
|
| 812 | #define CyRBPR (0x78*2)
|
| 813 | #define CyRCOR (0x7C*2)
|
| 814 | #define CyTBPR (0x72*2)
|
| 815 | #define CyTCOR (0x76*2)
|
| 816 |
|
| 817 |
|
| 818 |
|
| 819 | #define CyPLX_VER (0x3400)
|
| 820 | #define PLX_9050 0x0b
|
| 821 | #define PLX_9060 0x0c
|
| 822 | #define PLX_9080 0x0d
|
| 823 |
|
| 824 |
|
| 825 |
|
| 826 | #endif
|
| 827 | #endif
|