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#ifndef _LINUX_CYCLADES_H
68#define _LINUX_CYCLADES_H
69
70#include <linux/types.h>
71
72struct cyclades_monitor {
73 unsigned long int_count;
74 unsigned long char_count;
75 unsigned long char_max;
76 unsigned long char_last;
77};
78
79
80
81
82
83
84struct cyclades_idle_stats {
85 __kernel_time_t in_use;
86 __kernel_time_t recv_idle;
87 __kernel_time_t xmit_idle;
88 unsigned long recv_bytes;
89 unsigned long xmit_bytes;
90 unsigned long overruns;
91 unsigned long frame_errs;
92 unsigned long parity_errs;
93};
94
95#define CYCLADES_MAGIC 0x4359
96
97#define CYGETMON 0x435901
98#define CYGETTHRESH 0x435902
99#define CYSETTHRESH 0x435903
100#define CYGETDEFTHRESH 0x435904
101#define CYSETDEFTHRESH 0x435905
102#define CYGETTIMEOUT 0x435906
103#define CYSETTIMEOUT 0x435907
104#define CYGETDEFTIMEOUT 0x435908
105#define CYSETDEFTIMEOUT 0x435909
106#define CYSETRFLOW 0x43590a
107#define CYGETRFLOW 0x43590b
108#define CYSETRTSDTR_INV 0x43590c
109#define CYGETRTSDTR_INV 0x43590d
110#define CYZSETPOLLCYCLE 0x43590e
111#define CYZGETPOLLCYCLE 0x43590f
112#define CYGETCD1400VER 0x435910
113#define CYSETWAIT 0x435912
114#define CYGETWAIT 0x435913
115
116
117
118#define CZIOC ('M' << 8)
119#define CZ_NBOARDS (CZIOC|0xfa)
120#define CZ_BOOT_START (CZIOC|0xfb)
121#define CZ_BOOT_DATA (CZIOC|0xfc)
122#define CZ_BOOT_END (CZIOC|0xfd)
123#define CZ_TEST (CZIOC|0xfe)
124
125#define CZ_DEF_POLL (HZ/25)
126
127#define MAX_BOARD 4
128#define MAX_DEV 256
129#define CYZ_MAX_SPEED 921600
130
131#define CYZ_FIFO_SIZE 16
132
133#define CYZ_BOOT_NWORDS 0x100
134struct CYZ_BOOT_CTRL {
135 unsigned short nboard;
136 int status[MAX_BOARD];
137 int nchannel[MAX_BOARD];
138 int fw_rev[MAX_BOARD];
139 unsigned long offset;
140 unsigned long data[CYZ_BOOT_NWORDS];
141};
142
143
144#ifndef DP_WINDOW_SIZE
145
146
147
148
149#define DP_WINDOW_SIZE (0x00080000)
150#define ZE_DP_WINDOW_SIZE (0x00100000)
151
152#define CTRL_WINDOW_SIZE (0x00000080)
153
154
155
156
157
158
159
160struct CUSTOM_REG {
161 __u32 fpga_id;
162 __u32 fpga_version;
163 __u32 cpu_start;
164 __u32 cpu_stop;
165 __u32 misc_reg;
166 __u32 idt_mode;
167 __u32 uart_irq_status;
168 __u32 clear_timer0_irq;
169 __u32 clear_timer1_irq;
170 __u32 clear_timer2_irq;
171 __u32 test_register;
172 __u32 test_count;
173 __u32 timer_select;
174 __u32 pr_uart_irq_status;
175 __u32 ram_wait_state;
176 __u32 uart_wait_state;
177 __u32 timer_wait_state;
178 __u32 ack_wait_state;
179};
180
181
182
183
184
185
186
187struct RUNTIME_9060 {
188 __u32 loc_addr_range;
189 __u32 loc_addr_base;
190 __u32 loc_arbitr;
191 __u32 endian_descr;
192 __u32 loc_rom_range;
193 __u32 loc_rom_base;
194 __u32 loc_bus_descr;
195 __u32 loc_range_mst;
196 __u32 loc_base_mst;
197 __u32 loc_range_io;
198 __u32 pci_base_mst;
199 __u32 pci_conf_io;
200 __u32 filler1;
201 __u32 filler2;
202 __u32 filler3;
203 __u32 filler4;
204 __u32 mail_box_0;
205 __u32 mail_box_1;
206 __u32 mail_box_2;
207 __u32 mail_box_3;
208 __u32 filler5;
209 __u32 filler6;
210 __u32 filler7;
211 __u32 filler8;
212 __u32 pci_doorbell;
213 __u32 loc_doorbell;
214 __u32 intr_ctrl_stat;
215 __u32 init_ctrl;
216};
217
218
219
220#define WIN_RAM 0x00000001L
221#define WIN_CREG 0x14000001L
222
223
224
225#define TIMER_BY_1M 0x00
226#define TIMER_BY_256K 0x01
227#define TIMER_BY_128K 0x02
228#define TIMER_BY_32K 0x03
229
230
231#endif
232
233#ifndef ZFIRM_ID
234
235
236
237
238
239
240
241
242
243#define MAX_CHAN 64
244
245
246
247#define ID_ADDRESS 0x00000180L
248#define ZFIRM_ID 0x5557465AL
249#define ZFIRM_HLT 0x59505B5CL
250#define ZFIRM_RST 0x56040674L
251
252#define ZF_TINACT_DEF 1000
253
254#define ZF_TINACT ZF_TINACT_DEF
255
256struct FIRM_ID {
257 __u32 signature;
258 __u32 zfwctrl_addr;
259};
260
261
262
263#define C_OS_LINUX 0x00000030
264
265
266
267#define C_CH_DISABLE 0x00000000
268#define C_CH_TXENABLE 0x00000001
269#define C_CH_RXENABLE 0x00000002
270#define C_CH_ENABLE 0x00000003
271#define C_CH_LOOPBACK 0x00000004
272
273
274
275#define C_PR_NONE 0x00000000
276#define C_PR_ODD 0x00000001
277#define C_PR_EVEN 0x00000002
278#define C_PR_MARK 0x00000004
279#define C_PR_SPACE 0x00000008
280#define C_PR_PARITY 0x000000ff
281
282#define C_PR_DISCARD 0x00000100
283#define C_PR_IGNORE 0x00000200
284
285
286
287#define C_DL_CS5 0x00000001
288#define C_DL_CS6 0x00000002
289#define C_DL_CS7 0x00000004
290#define C_DL_CS8 0x00000008
291#define C_DL_CS 0x0000000f
292#define C_DL_1STOP 0x00000010
293#define C_DL_15STOP 0x00000020
294#define C_DL_2STOP 0x00000040
295#define C_DL_STOP 0x000000f0
296
297
298
299#define C_IN_DISABLE 0x00000000
300#define C_IN_TXBEMPTY 0x00000001
301#define C_IN_TXLOWWM 0x00000002
302#define C_IN_RXHIWM 0x00000010
303#define C_IN_RXNNDT 0x00000020
304#define C_IN_MDCD 0x00000100
305#define C_IN_MDSR 0x00000200
306#define C_IN_MRI 0x00000400
307#define C_IN_MCTS 0x00000800
308#define C_IN_RXBRK 0x00001000
309#define C_IN_PR_ERROR 0x00002000
310#define C_IN_FR_ERROR 0x00004000
311#define C_IN_OVR_ERROR 0x00008000
312#define C_IN_RXOFL 0x00010000
313#define C_IN_IOCTLW 0x00020000
314#define C_IN_MRTS 0x00040000
315#define C_IN_ICHAR 0x00080000
316
317
318
319#define C_FL_OXX 0x00000001
320#define C_FL_IXX 0x00000002
321#define C_FL_OIXANY 0x00000004
322#define C_FL_SWFLOW 0x0000000f
323
324
325
326#define C_FS_TXIDLE 0x00000000
327#define C_FS_SENDING 0x00000001
328#define C_FS_SWFLOW 0x00000002
329
330
331
332#define C_RS_PARAM 0x80000000
333
334#define C_RS_RTS 0x00000001
335#define C_RS_DTR 0x00000004
336#define C_RS_DCD 0x00000100
337#define C_RS_DSR 0x00000200
338#define C_RS_RI 0x00000400
339#define C_RS_CTS 0x00000800
340
341
342
343#define C_CM_RESET 0x01
344#define C_CM_IOCTL 0x02
345#define C_CM_IOCTLW 0x03
346#define C_CM_IOCTLM 0x04
347#define C_CM_SENDXOFF 0x10
348#define C_CM_SENDXON 0x11
349#define C_CM_CLFLOW 0x12
350#define C_CM_SENDBRK 0x41
351#define C_CM_INTBACK 0x42
352#define C_CM_SET_BREAK 0x43
353#define C_CM_CLR_BREAK 0x44
354#define C_CM_CMD_DONE 0x45
355#define C_CM_INTBACK2 0x46
356#define C_CM_TINACT 0x51
357#define C_CM_IRQ_ENBL 0x52
358#define C_CM_IRQ_DSBL 0x53
359#define C_CM_ACK_ENBL 0x54
360#define C_CM_ACK_DSBL 0x55
361#define C_CM_FLUSH_RX 0x56
362#define C_CM_FLUSH_TX 0x57
363#define C_CM_Q_ENABLE 0x58
364
365#define C_CM_Q_DISABLE 0x59
366
367
368#define C_CM_TXBEMPTY 0x60
369#define C_CM_TXLOWWM 0x61
370#define C_CM_RXHIWM 0x62
371#define C_CM_RXNNDT 0x63
372#define C_CM_TXFEMPTY 0x64
373#define C_CM_ICHAR 0x65
374#define C_CM_MDCD 0x70
375#define C_CM_MDSR 0x71
376#define C_CM_MRI 0x72
377#define C_CM_MCTS 0x73
378#define C_CM_MRTS 0x74
379#define C_CM_RXBRK 0x84
380#define C_CM_PR_ERROR 0x85
381#define C_CM_FR_ERROR 0x86
382#define C_CM_OVR_ERROR 0x87
383#define C_CM_RXOFL 0x88
384#define C_CM_CMDERROR 0x90
385#define C_CM_FATAL 0x91
386#define C_CM_HW_RESET 0x92
387
388
389
390
391
392
393
394struct CH_CTRL {
395 __u32 op_mode;
396 __u32 intr_enable;
397 __u32 sw_flow;
398 __u32 flow_status;
399 __u32 comm_baud;
400 __u32 comm_parity;
401 __u32 comm_data_l;
402 __u32 comm_flags;
403 __u32 hw_flow;
404 __u32 rs_control;
405 __u32 rs_status;
406 __u32 flow_xon;
407 __u32 flow_xoff;
408 __u32 hw_overflow;
409 __u32 sw_overflow;
410 __u32 comm_error;
411 __u32 ichar;
412 __u32 filler[7];
413};
414
415
416
417
418
419
420
421struct BUF_CTRL {
422 __u32 flag_dma;
423 __u32 tx_bufaddr;
424 __u32 tx_bufsize;
425 __u32 tx_threshold;
426 __u32 tx_get;
427 __u32 tx_put;
428 __u32 rx_bufaddr;
429 __u32 rx_bufsize;
430 __u32 rx_threshold;
431 __u32 rx_get;
432 __u32 rx_put;
433 __u32 filler[5];
434};
435
436
437
438
439
440
441struct BOARD_CTRL {
442
443
444 __u32 n_channel;
445 __u32 fw_version;
446
447
448 __u32 op_system;
449 __u32 dr_version;
450
451
452 __u32 inactivity;
453
454
455 __u32 hcmd_channel;
456 __u32 hcmd_param;
457
458
459 __u32 fwcmd_channel;
460 __u32 fwcmd_param;
461 __u32 zf_int_queue_addr;
462
463
464 __u32 filler[6];
465};
466
467
468
469#define QUEUE_SIZE (10*MAX_CHAN)
470
471struct INT_QUEUE {
472 unsigned char intr_code[QUEUE_SIZE];
473 unsigned long channel[QUEUE_SIZE];
474 unsigned long param[QUEUE_SIZE];
475 unsigned long put;
476 unsigned long get;
477};
478
479
480
481
482
483
484struct ZFW_CTRL {
485 struct BOARD_CTRL board_ctrl;
486 struct CH_CTRL ch_ctrl[MAX_CHAN];
487 struct BUF_CTRL buf_ctrl[MAX_CHAN];
488};
489
490
491#endif
492
493#ifdef __KERNEL__
494
495
496struct cyclades_card {
497 void __iomem *base_addr;
498 union {
499 void __iomem *p9050;
500 struct RUNTIME_9060 __iomem *p9060;
501 } ctl_addr;
502 struct BOARD_CTRL __iomem *board_ctrl;
503 int irq;
504 unsigned int num_chips;
505 unsigned int first_line;
506 unsigned int nports;
507 int bus_index;
508 int intr_enabled;
509 u32 hw_ver;
510 spinlock_t card_lock;
511 struct cyclades_port *ports;
512};
513
514
515
516
517
518
519#define cy_writeb(port,val) do { writeb((val), (port)); mb(); } while (0)
520#define cy_writew(port,val) do { writew((val), (port)); mb(); } while (0)
521#define cy_writel(port,val) do { writel((val), (port)); mb(); } while (0)
522
523
524
525
526struct cyclades_icount {
527 __u32 cts, dsr, rng, dcd, tx, rx;
528 __u32 frame, parity, overrun, brk;
529 __u32 buf_overrun;
530};
531
532
533
534
535
536
537
538
539
540
541struct cyclades_port {
542 int magic;
543 struct tty_port port;
544 struct cyclades_card *card;
545 union {
546 struct {
547 void __iomem *base_addr;
548 } cyy;
549 struct {
550 struct CH_CTRL __iomem *ch_ctrl;
551 struct BUF_CTRL __iomem *buf_ctrl;
552 } cyz;
553 } u;
554 int line;
555 int flags;
556 int type;
557 int read_status_mask;
558 int ignore_status_mask;
559 int timeout;
560 int xmit_fifo_size;
561 int cor1,cor2,cor3,cor4,cor5;
562 int tbpr,tco,rbpr,rco;
563 int baud;
564 int rflow;
565 int rtsdtr_inv;
566 int chip_rev;
567 int custom_divisor;
568 u8 x_char;
569 int breakon;
570 int breakoff;
571 int xmit_head;
572 int xmit_tail;
573 int xmit_cnt;
574 int default_threshold;
575 int default_timeout;
576 unsigned long rflush_count;
577 struct cyclades_monitor mon;
578 struct cyclades_idle_stats idle_stats;
579 struct cyclades_icount icount;
580 struct completion shutdown_wait;
581 int throttle;
582};
583
584#define CLOSING_WAIT_DELAY 30*HZ
585#define CY_CLOSING_WAIT_NONE ASYNC_CLOSING_WAIT_NONE
586#define CY_CLOSING_WAIT_INF ASYNC_CLOSING_WAIT_INF
587
588
589#define CyMAX_CHIPS_PER_CARD 8
590#define CyMAX_CHAR_FIFO 12
591#define CyPORTS_PER_CHIP 4
592#define CD1400_MAX_SPEED 115200
593
594#define CyISA_Ywin 0x2000
595
596#define CyPCI_Ywin 0x4000
597#define CyPCI_Yctl 0x80
598#define CyPCI_Zctl CTRL_WINDOW_SIZE
599#define CyPCI_Zwin 0x80000
600#define CyPCI_Ze_win (2 * CyPCI_Zwin)
601
602#define PCI_DEVICE_ID_MASK 0x06
603
604
605
606#define CD1400_REV_G 0x46
607#define CD1400_REV_J 0x48
608
609#define CyRegSize 0x0400
610#define Cy_HwReset 0x1400
611#define Cy_ClrIntr 0x1800
612#define Cy_EpldRev 0x1e00
613
614
615
616#define CyGFRCR (0x40*2)
617#define CyRevE (44)
618#define CyCAR (0x68*2)
619#define CyCHAN_0 (0x00)
620#define CyCHAN_1 (0x01)
621#define CyCHAN_2 (0x02)
622#define CyCHAN_3 (0x03)
623#define CyGCR (0x4B*2)
624#define CyCH0_SERIAL (0x00)
625#define CyCH0_PARALLEL (0x80)
626#define CySVRR (0x67*2)
627#define CySRModem (0x04)
628#define CySRTransmit (0x02)
629#define CySRReceive (0x01)
630#define CyRICR (0x44*2)
631#define CyTICR (0x45*2)
632#define CyMICR (0x46*2)
633#define CyICR0 (0x00)
634#define CyICR1 (0x01)
635#define CyICR2 (0x02)
636#define CyICR3 (0x03)
637#define CyRIR (0x6B*2)
638#define CyTIR (0x6A*2)
639#define CyMIR (0x69*2)
640#define CyIRDirEq (0x80)
641#define CyIRBusy (0x40)
642#define CyIRUnfair (0x20)
643#define CyIRContext (0x1C)
644#define CyIRChannel (0x03)
645#define CyPPR (0x7E*2)
646#define CyCLOCK_20_1MS (0x27)
647#define CyCLOCK_25_1MS (0x31)
648#define CyCLOCK_25_5MS (0xf4)
649#define CyCLOCK_60_1MS (0x75)
650#define CyCLOCK_60_2MS (0xea)
651
652
653
654#define CyRIVR (0x43*2)
655#define CyTIVR (0x42*2)
656#define CyMIVR (0x41*2)
657#define CyIVRMask (0x07)
658#define CyIVRRxEx (0x07)
659#define CyIVRRxOK (0x03)
660#define CyIVRTxOK (0x02)
661#define CyIVRMdmOK (0x01)
662#define CyTDR (0x63*2)
663#define CyRDSR (0x62*2)
664#define CyTIMEOUT (0x80)
665#define CySPECHAR (0x70)
666#define CyBREAK (0x08)
667#define CyPARITY (0x04)
668#define CyFRAME (0x02)
669#define CyOVERRUN (0x01)
670#define CyMISR (0x4C*2)
671
672#define CyEOSRR (0x60*2)
673
674
675
676#define CyLIVR (0x18*2)
677#define CyMscsr (0x01)
678#define CyTdsr (0x02)
679#define CyRgdsr (0x03)
680#define CyRedsr (0x07)
681#define CyCCR (0x05*2)
682
683#define CyCHAN_RESET (0x80)
684#define CyCHIP_RESET (0x81)
685#define CyFlushTransFIFO (0x82)
686
687#define CyCOR_CHANGE (0x40)
688#define CyCOR1ch (0x02)
689#define CyCOR2ch (0x04)
690#define CyCOR3ch (0x08)
691
692#define CySEND_SPEC_1 (0x21)
693#define CySEND_SPEC_2 (0x22)
694#define CySEND_SPEC_3 (0x23)
695#define CySEND_SPEC_4 (0x24)
696
697#define CyCHAN_CTL (0x10)
698#define CyDIS_RCVR (0x01)
699#define CyENB_RCVR (0x02)
700#define CyDIS_XMTR (0x04)
701#define CyENB_XMTR (0x08)
702#define CySRER (0x06*2)
703#define CyMdmCh (0x80)
704#define CyRxData (0x10)
705#define CyTxRdy (0x04)
706#define CyTxMpty (0x02)
707#define CyNNDT (0x01)
708#define CyCOR1 (0x08*2)
709#define CyPARITY_NONE (0x00)
710#define CyPARITY_0 (0x20)
711#define CyPARITY_1 (0xA0)
712#define CyPARITY_E (0x40)
713#define CyPARITY_O (0xC0)
714#define Cy_1_STOP (0x00)
715#define Cy_1_5_STOP (0x04)
716#define Cy_2_STOP (0x08)
717#define Cy_5_BITS (0x00)
718#define Cy_6_BITS (0x01)
719#define Cy_7_BITS (0x02)
720#define Cy_8_BITS (0x03)
721#define CyCOR2 (0x09*2)
722#define CyIXM (0x80)
723#define CyTxIBE (0x40)
724#define CyETC (0x20)
725#define CyAUTO_TXFL (0x60)
726#define CyLLM (0x10)
727#define CyRLM (0x08)
728#define CyRtsAO (0x04)
729#define CyCtsAE (0x02)
730#define CyDsrAE (0x01)
731#define CyCOR3 (0x0A*2)
732#define CySPL_CH_DRANGE (0x80)
733#define CySPL_CH_DET1 (0x40)
734
735#define CyFL_CTRL_TRNSP (0x20)
736#define CySPL_CH_DET2 (0x10)
737
738#define CyREC_FIFO (0x0F)
739#define CyCOR4 (0x1E*2)
740#define CyCOR5 (0x1F*2)
741#define CyCCSR (0x0B*2)
742#define CyRxEN (0x80)
743#define CyRxFloff (0x40)
744#define CyRxFlon (0x20)
745#define CyTxEN (0x08)
746#define CyTxFloff (0x04)
747#define CyTxFlon (0x02)
748#define CyRDCR (0x0E*2)
749#define CySCHR1 (0x1A*2)
750#define CySCHR2 (0x1B*2)
751#define CySCHR3 (0x1C*2)
752#define CySCHR4 (0x1D*2)
753#define CySCRL (0x22*2)
754#define CySCRH (0x23*2)
755#define CyLNC (0x24*2)
756#define CyMCOR1 (0x15*2)
757#define CyMCOR2 (0x16*2)
758#define CyRTPR (0x21*2)
759#define CyMSVR1 (0x6C*2)
760#define CyMSVR2 (0x6D*2)
761#define CyANY_DELTA (0xF0)
762#define CyDSR (0x80)
763#define CyCTS (0x40)
764#define CyRI (0x20)
765#define CyDCD (0x10)
766#define CyDTR (0x02)
767#define CyRTS (0x01)
768#define CyPVSR (0x6F*2)
769#define CyRBPR (0x78*2)
770#define CyRCOR (0x7C*2)
771#define CyTBPR (0x72*2)
772#define CyTCOR (0x76*2)
773
774
775
776#define CyPLX_VER (0x3400)
777#define PLX_9050 0x0b
778#define PLX_9060 0x0c
779#define PLX_9080 0x0d
780
781
782
783#endif
784#endif
785