aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/silicom/bp_mod.h
blob: 8154a7bf050fe7a1d7607e80bdbc889669b3b972 (plain) (blame)
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
/******************************************************************************/
/*                                                                            */
/* Bypass Control utility, Copyright (c) 2005 Silicom                         */
/*                                                                            */
/* This program is free software; you can redistribute it and/or modify       */
/* it under the terms of the GNU General Public License as published by       */
/* the Free Software Foundation, located in the file LICENSE.                 */
/*                                                                            */
/*                                                                            */
/* bp_mod.h                                                                   */
/*                                                                            */
/******************************************************************************/

#ifndef BP_MOD_H
#define BP_MOD_H
#include "bits.h"

#define usec_delay(x) udelay(x)
#ifndef msec_delay_bp
#define msec_delay_bp(x)			\
do {						\
	int  i;					\
	if (1) {				\
		for (i = 0; i < 1000; i++) {	\
			udelay(x);		\
		}				\
	} else {				\
		msleep(x);			\
	}					\
} while (0)

#endif

#include <linux/param.h>

#ifndef jiffies_to_msecs
#define jiffies_to_msecs(x) _kc_jiffies_to_msecs(x)
static inline unsigned int jiffies_to_msecs(const unsigned long j)
{
#if HZ <= 1000 && !(1000 % HZ)
	return (1000 / HZ) * j;
#elif HZ > 1000 && !(HZ % 1000)
	return (j + (HZ / 1000) - 1) / (HZ / 1000);
#else
	return (j * 1000) / HZ;
#endif
}
#endif

#define SILICOM_VID              0x1374
#define SILICOM_SVID             0x1374

#define SILICOM_PXG2BPFI_SSID    0x0026
#define SILICOM_PXG2BPFILX_SSID  0x0027
#define SILICOM_PXGBPI_SSID      0x0028
#define SILICOM_PXGBPIG_SSID     0x0029
#define SILICOM_PXG2TBFI_SSID    0x002a
#define SILICOM_PXG4BPI_SSID     0x002c
#define SILICOM_PXG4BPFI_SSID    0x002d
#define SILICOM_PXG4BPFILX_SSID  0x002e
#define SILICOM_PXG2BPFIL_SSID   0x002F
#define SILICOM_PXG2BPFILLX_SSID 0x0030
#define SILICOM_PEG4BPI_SSID     0x0031
#define SILICOM_PEG2BPI_SSID     0x0037
#define SILICOM_PEG4BPIN_SSID    0x0038
#define SILICOM_PEG2BPFI_SSID    0x0039
#define SILICOM_PEG2BPFILX_SSID  0x003A
#define SILICOM_PMCXG2BPFI_SSID  0x003B
#define NOKIA_PMCXG2BPFIN_SSID   0x0510
#define NOKIA_PMCXG2BPIN_SSID    0x0513
#define NOKIA_PMCXG4BPIN_SSID    0x0514
#define NOKIA_PMCXG2BPFIN_SVID   0x13B8
#define NOKIA_PMCXG2BPIN2_SSID    0x0515
#define NOKIA_PMCXG4BPIN2_SSID    0x0516
#define SILICOM_PMCX2BPI_SSID       0x041
#define SILICOM_PMCX4BPI_SSID       0x042
#define SILICOM_PXG2BISC1_SSID   0x003d
#define SILICOM_PEG2TBFI_SSID    0x003E
#define SILICOM_PXG2TBI_SSID     0x003f
#define SILICOM_PXG4BPFID_SSID   0x0043
#define SILICOM_PEG4BPFI_SSID    0x0040
#define SILICOM_PEG4BPIPT_SSID   0x0044
#define SILICOM_PXG6BPI_SSID     0x0045
#define SILICOM_PEG4BPIL_SSID    0x0046
#define SILICOM_PEG2BPI5_SSID    0x0052
#define SILICOM_PEG6BPI_SSID    0x0053
#define SILICOM_PEG4BPFI5_SSID   0x0050
#define SILICOM_PEG4BPFI5LX_SSID   0x0051
#define SILICOM_PEG2BISC6_SSID 0x54

#define SILICOM_PEG6BPIFC_SSID 0x55

#define SILICOM_PEG2BPFI5_SSID   0x0056
#define SILICOM_PEG2BPFI5LX_SSID   0x0057

#define SILICOM_PXEG4BPFI_SSID    0x0058

#define SILICOM_PEG2BPFID_SSID   0x0047
#define SILICOM_PEG2BPFIDLX_SSID  0x004C
#define SILICOM_MEG2BPFILN_SSID  0x0048
#define SILICOM_MEG2BPFINX_SSID  0x0049
#define SILICOM_PEG4BPFILX_SSID  0x004A
#define SILICOM_MHIO8AD_SSID    0x004F

#define SILICOM_MEG2BPFILXLN_SSID 0x004b
#define SILICOM_PEG2BPIX1_SSID    0x004d
#define SILICOM_MEG2BPFILXNX_SSID 0x004e

#define SILICOM_PE10G2BPISR_SSID  0x0102
#define SILICOM_PE10G2BPILR_SSID  0x0103
#define SILICOM_PE10G2BPICX4_SSID  0x0101

#define SILICOM_XE10G2BPILR_SSID 0x0163
#define SILICOM_XE10G2BPISR_SSID 0x0162
#define SILICOM_XE10G2BPICX4_SSID 0x0161
#define SILICOM_XE10G2BPIT_SSID   0x0160

#define SILICOM_PE10GDBISR_SSID   0x0181
#define SILICOM_PE10GDBILR_SSID   0x0182

#define SILICOM_PE210G2DBi9SR_SSID	    0x0188
#define SILICOM_PE210G2DBi9SRRB_SSID	0x0188
#define SILICOM_PE210G2DBi9LR_SSID	    0x0189
#define SILICOM_PE210G2DBi9LRRB_SSID	0x0189
#define SILICOM_PE310G4DBi940SR_SSID	0x018C

#define SILICOM_PE310G4BPi9T_SSID       0x130
#define SILICOM_PE310G4BPi9SR_SSID        0x132
#define SILICOM_PE310G4BPi9LR_SSID        0x133

#define NOKIA_XE10G2BPIXR_SVID   0x13B8
#define NOKIA_XE10G2BPIXR_SSID   0x051C

#define INTEL_PEG4BPII_PID   0x10A0
#define INTEL_PEG4BPFII_PID   0x10A1
#define INTEL_PEG4BPII_SSID   0x11A0
#define INTEL_PEG4BPFII_SSID   0x11A1

#define INTEL_PEG4BPIIO_SSID   0x10A0
#define INTEL_PEG4BPIIO_PID   0x105e

#define BROADCOM_VID         0x14e4
#define BROADCOM_PE10G2_PID  0x164e

#define SILICOM_PE10G2BPTCX4_SSID 0x0141
#define SILICOM_PE10G2BPTSR_SSID  0x0142
#define SILICOM_PE10G2BPTLR_SSID  0x0143
#define SILICOM_PE10G2BPTT_SSID   0x0140

#define SILICOM_PEG4BPI6_SSID     0x0320
#define SILICOM_PEG4BPFI6_SSID    0x0321
#define SILICOM_PEG4BPFI6LX_SSID    0x0322
#define SILICOM_PEG4BPFI6ZX_SSID    0x0323

#define SILICOM_PEG2BPI6_SSID    0x0300
#define SILICOM_PEG2BPFI6_SSID    0x0301
#define SILICOM_PEG2BPFI6LX_SSID    0x0302
#define SILICOM_PEG2BPFI6ZX_SSID    0x0303
#define SILICOM_PEG2BPFI6FLXM_SSID  0x0304

#define SILICOM_PEG2DBI6_SSID    0x0308
#define SILICOM_PEG2DBFI6_SSID    0x0309
#define SILICOM_PEG2DBFI6LX_SSID    0x030A
#define SILICOM_PEG2DBFI6ZX_SSID    0x030B

#define SILICOM_MEG2BPI6_SSID     0x0310
#define SILICOM_XEG2BPI6_SSID    0x0318
#define SILICOM_PEG4BPI6FC_SSID     0x0328
#define SILICOM_PEG4BPFI6FC_SSID    0x0329
#define SILICOM_PEG4BPFI6FCLX_SSID    0x032A
#define SILICOM_PEG4BPFI6FCZX_SSID    0x032B

#define SILICOM_PEG6BPI6_SSID     0x0340

#define SILICOM_PEG2BPI6SC6_SSID     0x0360

#define SILICOM_MEG2BPI6_SSID     0x0310
#define SILICOM_XEG2BPI6_SSID     0x0318
#define SILICOM_MEG4BPI6_SSID     0x0330

#define SILICOM_PE2G4BPi80L_SSID    0x0380

#define SILICOM_M6E2G8BPi80A_SSID    0x0474

#define SILICOM_PE2G4BPi35_SSID    0x03d8

#define SILICOM_PE2G4BPFi80_SSID    0x0381
#define SILICOM_PE2G4BPFi80LX_SSID    0x0382
#define SILICOM_PE2G4BPFi80ZX_SSID    0x0383

#define SILICOM_PE2G4BPi80_SSID    0x0388

#define SILICOM_PE2G2BPi80_SSID    0x0390
#define SILICOM_PE2G2BPFi80_SSID    0x0391
#define SILICOM_PE2G2BPFi80LX_SSID    0x0392
#define SILICOM_PE2G2BPFi80ZX_SSID    0x0393

#define SILICOM_PE2G4BPi35L_SSID    0x03D0
#define SILICOM_PE2G4BPFi35_SSID    0x03D1
#define SILICOM_PE2G4BPFi35LX_SSID    0x03D2
#define SILICOM_PE2G4BPFi35ZX_SSID    0x03D3

#define SILICOM_PE2G2BPi35_SSID    0x03c0
#define SILICOM_PAC1200BPi35_SSID    0x03cc
#define SILICOM_PE2G2BPFi35_SSID    0x03C1
#define SILICOM_PE2G2BPFi35LX_SSID    0x03C2
#define SILICOM_PE2G2BPFi35ZX_SSID    0x03C3

#define SILICOM_PE2G6BPi35_SSID    0x03E0
#define SILICOM_PE2G6BPi35CX_SSID  0x0AA0

#define INTEL_PE210G2SPI9_SSID     0x00C

#define SILICOM_M1EG2BPI6_SSID     0x400

#define SILICOM_M1EG2BPFI6_SSID     0x0401
#define SILICOM_M1EG2BPFI6LX_SSID     0x0402
#define SILICOM_M1EG2BPFI6ZX_SSID     0x0403

#define SILICOM_M1EG4BPI6_SSID     0x0420

#define SILICOM_M1EG4BPFI6_SSID       0x0421
#define SILICOM_M1EG4BPFI6LX_SSID     0x0422
#define SILICOM_M1EG4BPFI6ZX_SSID     0x0423

#define SILICOM_M1EG6BPI6_SSID     0x0440

#define SILICOM_M1E2G4BPi80_SSID     0x0460
#define SILICOM_M1E2G4BPFi80_SSID       0x0461
#define SILICOM_M1E2G4BPFi80LX_SSID     0x0462
#define SILICOM_M1E2G4BPFi80ZX_SSID     0x0463

#define SILICOM_M6E2G8BPi80_SSID        0x0470
#define SILICOM_PE210G2BPi40_SSID       0x01a0

#define PEG540_IF_SERIES(pid) \
	((pid == SILICOM_PE210G2BPi40_SSID))

#define OLD_IF_SERIES(pid)\
	((pid == SILICOM_PXG2BPFI_SSID) || \
	 (pid == SILICOM_PXG2BPFILX_SSID))

#define P2BPFI_IF_SERIES(pid) \
	((pid == SILICOM_PXG2BPFI_SSID) || \
	 (pid == SILICOM_PXG2BPFILX_SSID) || \
	 (pid == SILICOM_PEG2BPFI_SSID) || \
	 (pid == SILICOM_PEG2BPFID_SSID) || \
	 (pid == SILICOM_PEG2BPFIDLX_SSID) || \
	 (pid == SILICOM_MEG2BPFILN_SSID) || \
	 (pid == SILICOM_MEG2BPFINX_SSID) || \
	 (pid == SILICOM_PEG4BPFILX_SSID) || \
	 (pid == SILICOM_PEG4BPFI_SSID) || \
	 (pid == SILICOM_PXEG4BPFI_SSID) || \
	 (pid == SILICOM_PXG4BPFID_SSID) || \
	 (pid == SILICOM_PEG2TBFI_SSID) || \
	 (pid == SILICOM_PE10G2BPISR_SSID) || \
	 (pid == SILICOM_PE10G2BPILR_SSID) || \
	 (pid == SILICOM_PEG2BPFILX_SSID) || \
	 (pid == SILICOM_PMCXG2BPFI_SSID) || \
	 (pid == SILICOM_MHIO8AD_SSID) || \
	 (pid == SILICOM_PEG4BPFI5LX_SSID) || \
	 (pid == SILICOM_PEG4BPFI5_SSID) || \
	 (pid == SILICOM_PEG4BPFI6FC_SSID) || \
	 (pid == SILICOM_PEG4BPFI6FCLX_SSID) || \
	 (pid == SILICOM_PEG4BPFI6FCZX_SSID) || \
	 (pid == NOKIA_PMCXG2BPFIN_SSID) || \
	 (pid == SILICOM_MEG2BPFILXLN_SSID) || \
	 (pid == SILICOM_MEG2BPFILXNX_SSID) || \
	 (pid == SILICOM_XE10G2BPIT_SSID) || \
	 (pid == SILICOM_XE10G2BPICX4_SSID) || \
	 (pid == SILICOM_XE10G2BPISR_SSID) || \
	 (pid == NOKIA_XE10G2BPIXR_SSID) || \
	 (pid == SILICOM_PE10GDBISR_SSID) || \
	 (pid == SILICOM_PE10GDBILR_SSID) || \
	 (pid == SILICOM_XE10G2BPILR_SSID))

#define INTEL_IF_SERIES(pid) \
	((pid == INTEL_PEG4BPII_SSID) || \
	 (pid == INTEL_PEG4BPIIO_SSID) || \
	 (pid == INTEL_PEG4BPFII_SSID))

#define NOKIA_SERIES(pid) \
	((pid == NOKIA_PMCXG2BPIN_SSID) || \
	 (pid == NOKIA_PMCXG4BPIN_SSID) || \
	 (pid == SILICOM_PMCX4BPI_SSID) || \
	 (pid == NOKIA_PMCXG2BPFIN_SSID) || \
	 (pid == SILICOM_PMCXG2BPFI_SSID) || \
	 (pid == NOKIA_PMCXG2BPIN2_SSID) || \
	 (pid == NOKIA_PMCXG4BPIN2_SSID) || \
	 (pid == SILICOM_PMCX2BPI_SSID))

#define DISCF_IF_SERIES(pid) \
	(pid == SILICOM_PEG2TBFI_SSID)

#define PEGF_IF_SERIES(pid) \
	((pid == SILICOM_PEG2BPFI_SSID) || \
	 (pid == SILICOM_PEG2BPFID_SSID) || \
	 (pid == SILICOM_PEG2BPFIDLX_SSID) || \
	 (pid == SILICOM_PEG2BPFILX_SSID) || \
	 (pid == SILICOM_PEG4BPFI_SSID) || \
	 (pid == SILICOM_PXEG4BPFI_SSID) || \
	 (pid == SILICOM_MEG2BPFILN_SSID) || \
	 (pid == SILICOM_MEG2BPFINX_SSID) || \
	 (pid == SILICOM_PEG4BPFILX_SSID) || \
	 (pid == SILICOM_PEG2TBFI_SSID) || \
	 (pid == SILICOM_MEG2BPFILXLN_SSID) || \
	 (pid == SILICOM_MEG2BPFILXNX_SSID))

#define TPL_IF_SERIES(pid) \
	((pid == SILICOM_PXG2BPFIL_SSID) || \
	 (pid == SILICOM_PXG2BPFILLX_SSID) || \
	 (pid == SILICOM_PXG2TBFI_SSID) || \
	 (pid == SILICOM_PXG4BPFID_SSID) || \
	 (pid == SILICOM_PXG4BPFI_SSID))

#define BP10G_IF_SERIES(pid) \
	((pid == SILICOM_PE10G2BPISR_SSID) || \
	 (pid == SILICOM_PE10G2BPICX4_SSID) || \
	 (pid == SILICOM_PE10G2BPILR_SSID) || \
	 (pid == SILICOM_XE10G2BPIT_SSID) || \
	 (pid == SILICOM_XE10G2BPICX4_SSID) || \
	 (pid == SILICOM_XE10G2BPISR_SSID) || \
	 (pid == NOKIA_XE10G2BPIXR_SSID) || \
	 (pid == SILICOM_PE10GDBISR_SSID) || \
	 (pid == SILICOM_PE10GDBILR_SSID) || \
	 (pid == SILICOM_XE10G2BPILR_SSID))

#define BP10GB_IF_SERIES(pid) \
	((pid == SILICOM_PE10G2BPTCX4_SSID) || \
	 (pid == SILICOM_PE10G2BPTSR_SSID) || \
	 (pid == SILICOM_PE10G2BPTLR_SSID) || \
	 (pid == SILICOM_PE10G2BPTT_SSID))

#define BP10G_CX4_SERIES(pid) \
	(pid == SILICOM_PE10G2BPICX4_SSID)

#define BP10GB_CX4_SERIES(pid) \
	(pid == SILICOM_PE10G2BPTCX4_SSID)

#define SILICOM_M2EG2BPFI6_SSID       0x0501
#define SILICOM_M2EG2BPFI6LX_SSID     0x0502
#define SILICOM_M2EG2BPFI6ZX_SSID     0x0503
#define SILICOM_M2EG4BPI6_SSID        0x0520

#define SILICOM_M2EG4BPFI6_SSID       0x0521
#define SILICOM_M2EG4BPFI6LX_SSID     0x0522
#define SILICOM_M2EG4BPFI6ZX_SSID     0x0523

#define SILICOM_M2EG6BPI6_SSID     0x0540

#define SILICOM_M1E10G2BPI9CX4_SSID  0x481
#define SILICOM_M1E10G2BPI9SR_SSID   0x482
#define SILICOM_M1E10G2BPI9LR_SSID   0x483
#define SILICOM_M1E10G2BPI9T_SSID    0x480

#define SILICOM_M2E10G2BPI9CX4_SSID  0x581
#define SILICOM_M2E10G2BPI9SR_SSID   0x582
#define SILICOM_M2E10G2BPI9LR_SSID   0x583
#define SILICOM_M2E10G2BPI9T_SSID    0x580

#define SILICOM_PE210G2BPI9CX4_SSID  0x121
#define SILICOM_PE210G2BPI9SR_SSID   0x122
#define SILICOM_PE210G2BPI9LR_SSID   0x123
#define SILICOM_PE210G2BPI9T_SSID    0x120

#define DBI_IF_SERIES(pid) \
	((pid == SILICOM_PE10GDBISR_SSID) || \
	 (pid == SILICOM_PE10GDBILR_SSID) || \
	 (pid == SILICOM_XE10G2BPILR_SSID) || \
	 (pid == SILICOM_PE210G2DBi9LR_SSID))

#define PEGF5_IF_SERIES(pid) \
	((pid == SILICOM_PEG2BPFI5_SSID) || \
	 (pid == SILICOM_PEG2BPFI5LX_SSID) || \
	 (pid == SILICOM_PEG4BPFI6_SSID) || \
	 (pid == SILICOM_PEG4BPFI6LX_SSID) || \
	 (pid == SILICOM_PEG4BPFI6ZX_SSID) || \
	 (pid == SILICOM_PEG2BPFI6_SSID) || \
	 (pid == SILICOM_PEG2BPFI6LX_SSID) || \
	 (pid == SILICOM_PEG2BPFI6ZX_SSID) || \
	 (pid == SILICOM_PEG2BPFI6FLXM_SSID) || \
	 (pid == SILICOM_PEG2DBFI6_SSID) || \
	 (pid == SILICOM_PEG2DBFI6LX_SSID) || \
	 (pid == SILICOM_PEG2DBFI6ZX_SSID) || \
	 (pid == SILICOM_PEG4BPI6FC_SSID) || \
	 (pid == SILICOM_PEG4BPFI6FCLX_SSID) || \
	 (pid == SILICOM_PEG4BPI6FC_SSID) || \
	 (pid == SILICOM_M1EG2BPFI6_SSID) || \
	 (pid == SILICOM_M1EG2BPFI6LX_SSID) || \
	 (pid == SILICOM_M1EG2BPFI6ZX_SSID) || \
	 (pid == SILICOM_M1EG4BPFI6_SSID) || \
	 (pid == SILICOM_M1EG4BPFI6LX_SSID) || \
	 (pid == SILICOM_M1EG4BPFI6ZX_SSID) || \
	 (pid == SILICOM_M2EG2BPFI6_SSID) || \
	 (pid == SILICOM_M2EG2BPFI6LX_SSID) || \
	 (pid == SILICOM_M2EG2BPFI6ZX_SSID) || \
	 (pid == SILICOM_M2EG4BPFI6_SSID) || \
	 (pid == SILICOM_M2EG4BPFI6LX_SSID) || \
	 (pid == SILICOM_M2EG4BPFI6ZX_SSID) || \
	 (pid == SILICOM_PEG4BPFI6FCZX_SSID))

#define PEG5_IF_SERIES(pid) \
	((pid == SILICOM_PEG4BPI6_SSID) || \
	 (pid == SILICOM_PEG2BPI6_SSID) || \
	 (pid == SILICOM_PEG4BPI6FC_SSID) || \
	 (pid == SILICOM_PEG6BPI6_SSID) || \
	 (pid == SILICOM_PEG2BPI6SC6_SSID) || \
	 (pid == SILICOM_MEG2BPI6_SSID) || \
	 (pid == SILICOM_XEG2BPI6_SSID) || \
	 (pid == SILICOM_MEG4BPI6_SSID) || \
	 (pid == SILICOM_M1EG2BPI6_SSID) || \
	 (pid == SILICOM_M1EG4BPI6_SSID) || \
	 (pid == SILICOM_M1EG6BPI6_SSID) || \
	 (pid == SILICOM_PEG6BPI_SSID) || \
	 (pid == SILICOM_PEG4BPIL_SSID) || \
	 (pid == SILICOM_PEG2BISC6_SSID) || \
	 (pid == SILICOM_PEG2BPI5_SSID))

#define PEG80_IF_SERIES(pid) \
	((pid == SILICOM_M1E2G4BPi80_SSID) || \
	 (pid == SILICOM_M6E2G8BPi80_SSID) || \
	 (pid == SILICOM_PE2G4BPi80L_SSID) || \
	 (pid == SILICOM_M6E2G8BPi80A_SSID) || \
	 (pid == SILICOM_PE2G2BPi35_SSID) || \
	 (pid == SILICOM_PAC1200BPi35_SSID) || \
	 (pid == SILICOM_PE2G4BPi35_SSID) || \
	 (pid == SILICOM_PE2G4BPi35L_SSID) || \
	 (pid == SILICOM_PE2G6BPi35_SSID) || \
	 (pid == SILICOM_PE2G2BPi80_SSID) || \
	 (pid == SILICOM_PE2G4BPi80_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80LX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80LX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35LX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35ZX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35LX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35ZX_SSID))

#define PEGF80_IF_SERIES(pid) \
	((pid == SILICOM_PE2G4BPFi80_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80LX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi80ZX_SSID) || \
	 (pid == SILICOM_M1E2G4BPFi80_SSID) || \
	 (pid == SILICOM_M1E2G4BPFi80LX_SSID) || \
	 (pid == SILICOM_M1E2G4BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80LX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi80ZX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35LX_SSID) || \
	 (pid == SILICOM_PE2G2BPFi35ZX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35LX_SSID) || \
	 (pid == SILICOM_PE2G4BPFi35ZX_SSID))

#define BP10G9_IF_SERIES(pid) \
	((pid == INTEL_PE210G2SPI9_SSID) || \
	 (pid == SILICOM_M1E10G2BPI9CX4_SSID) || \
	 (pid == SILICOM_M1E10G2BPI9SR_SSID) || \
	 (pid == SILICOM_M1E10G2BPI9LR_SSID) || \
	 (pid == SILICOM_M1E10G2BPI9T_SSID) || \
	 (pid == SILICOM_M2E10G2BPI9CX4_SSID) || \
	 (pid == SILICOM_M2E10G2BPI9SR_SSID) || \
	 (pid == SILICOM_M2E10G2BPI9LR_SSID) || \
	 (pid == SILICOM_M2E10G2BPI9T_SSID) || \
	 (pid == SILICOM_PE210G2BPI9CX4_SSID) || \
	 (pid == SILICOM_PE210G2BPI9SR_SSID) || \
	 (pid == SILICOM_PE210G2BPI9LR_SSID) || \
	 (pid == SILICOM_PE210G2DBi9SR_SSID) || \
	 (pid == SILICOM_PE210G2DBi9SRRB_SSID) || \
	 (pid == SILICOM_PE210G2DBi9LR_SSID) || \
	 (pid == SILICOM_PE210G2DBi9LRRB_SSID) || \
	 (pid == SILICOM_PE310G4DBi940SR_SSID) || \
	 (pid == SILICOM_PEG2BISC6_SSID) || \
	 (pid == SILICOM_PE310G4BPi9T_SSID) || \
	 (pid == SILICOM_PE310G4BPi9SR_SSID) || \
	 (pid == SILICOM_PE310G4BPi9LR_SSID) || \
	 (pid == SILICOM_PE210G2BPI9T_SSID))

/*******************************************************/
/* 1G INTERFACE ****************************************/
/*******************************************************/

/* Intel Registers */
#define BPCTLI_CTRL          0x00000
#define BPCTLI_CTRL_SWDPIO0  0x00400000
#define BPCTLI_CTRL_SWDPIN0  0x00040000

#define BPCTLI_CTRL_EXT 0x00018	/* Extended Device Control - RW */
#define BPCTLI_STATUS   0x00008	/* Device Status - RO */

/* HW related */
#define BPCTLI_CTRL_EXT_SDP6_DATA 0x00000040	/* Value of SW Defineable Pin 6 */
#define BPCTLI_CTRL_EXT_SDP7_DATA 0x00000080	/* Value of SW Defineable Pin 7 */
#define BPCTLI_CTRL_SDP0_DATA     0x00040000	/* SWDPIN 0 value */
#define BPCTLI_CTRL_EXT_SDP6_DIR  0x00000400	/* Direction of SDP6 0=in 1=out */
#define BPCTLI_CTRL_EXT_SDP7_DIR  0x00000800	/* Direction of SDP7 0=in 1=out */
#define BPCTLI_CTRL_SDP0_DIR      0x00400000	/* SDP0 Input or output */
#define BPCTLI_CTRL_SWDPIN1       0x00080000
#define BPCTLI_CTRL_SDP1_DIR      0x00800000

#define BPCTLI_STATUS_LU          0x00000002	/* Link up.0=no,1=link */

#define BPCTLI_CTRL_SDP0_SHIFT     18
#define BPCTLI_CTRL_EXT_SDP6_SHIFT 6

#define BPCTLI_STATUS_TBIMODE     0x00000020
#define BPCTLI_CTRL_EXT_LINK_MODE_PCIE_SERDES  0x00C00000
#define BPCTLI_CTRL_EXT_LINK_MODE_MASK         0x00C00000

#define BPCTLI_CTRL_EXT_MCLK_DIR  BPCTLI_CTRL_EXT_SDP7_DIR
#define BPCTLI_CTRL_EXT_MCLK_DATA BPCTLI_CTRL_EXT_SDP7_DATA
#define BPCTLI_CTRL_EXT_MDIO_DIR  BPCTLI_CTRL_EXT_SDP6_DIR
#define BPCTLI_CTRL_EXT_MDIO_DATA BPCTLI_CTRL_EXT_SDP6_DATA

#define BPCTLI_CTRL_EXT_MCLK_DIR5  BPCTLI_CTRL_SDP1_DIR
#define BPCTLI_CTRL_EXT_MCLK_DATA5 BPCTLI_CTRL_SWDPIN1
#define BPCTLI_CTRL_EXT_MCLK_DIR80  BPCTLI_CTRL_EXT_SDP6_DIR
#define BPCTLI_CTRL_EXT_MCLK_DATA80 BPCTLI_CTRL_EXT_SDP6_DATA
#define BPCTLI_CTRL_EXT_MDIO_DIR5  BPCTLI_CTRL_SWDPIO0
#define BPCTLI_CTRL_EXT_MDIO_DATA5 BPCTLI_CTRL_SWDPIN0
#define BPCTLI_CTRL_EXT_MDIO_DIR80  BPCTLI_CTRL_SWDPIO0
#define BPCTLI_CTRL_EXT_MDIO_DATA80 BPCTLI_CTRL_SWDPIN0

#define BPCTL_WRITE_REG(a, reg, value) \
	(writel((value), (void *)(((a)->mem_map) + BPCTLI_##reg)))

#define BPCTL_READ_REG(a, reg) ( \
	readl((void *)((a)->mem_map) + BPCTLI_##reg))

#define BPCTL_WRITE_FLUSH(a) BPCTL_READ_REG(a, STATUS)

#define BPCTL_BP_WRITE_REG(a, reg, value) ({ \
	BPCTL_WRITE_REG(a, reg, value); \
	BPCTL_WRITE_FLUSH(a); })

/**************************************************************/
/************** 82575 Interface********************************/
/**************************************************************/

#define BPCTLI_MII_CR_POWER_DOWN       0x0800
#define BPCTLI_PHY_CONTROL      0x00	/* Control Register */
#define BPCTLI_MDIC     0x00020	/* MDI Control - RW */
#define BPCTLI_IGP01E1000_PHY_PAGE_SELECT        0x1F	/* Page Select */
#define BPCTLI_MAX_PHY_REG_ADDRESS    0x1F	/* 5 bit address bus (0-0x1F) */

#define BPCTLI_MDIC_DATA_MASK 0x0000FFFF
#define BPCTLI_MDIC_REG_MASK  0x001F0000
#define BPCTLI_MDIC_REG_SHIFT 16
#define BPCTLI_MDIC_PHY_MASK  0x03E00000
#define BPCTLI_MDIC_PHY_SHIFT 21
#define BPCTLI_MDIC_OP_WRITE  0x04000000
#define BPCTLI_MDIC_OP_READ   0x08000000
#define BPCTLI_MDIC_READY     0x10000000
#define BPCTLI_MDIC_INT_EN    0x20000000
#define BPCTLI_MDIC_ERROR     0x40000000

#define BPCTLI_SWFW_PHY0_SM  0x02
#define BPCTLI_SWFW_PHY1_SM  0x04

#define BPCTLI_SW_FW_SYNC  0x05B5C	/* Software-Firmware Synchronization - RW */

#define BPCTLI_SWSM      0x05B50	/* SW Semaphore */
#define BPCTLI_FWSM      0x05B54	/* FW Semaphore */

#define BPCTLI_SWSM_SMBI         0x00000001	/* Driver Semaphore bit */
#define BPCTLI_SWSM_SWESMBI      0x00000002	/* FW Semaphore bit */
#define BPCTLI_MAX_PHY_MULTI_PAGE_REG 0xF
#define BPCTLI_GEN_POLL_TIMEOUT          640

/********************************************************/

/********************************************************/
/* 10G INTERFACE ****************************************/
/********************************************************/

#define BP10G_I2CCTL              0x28

/* I2CCTL Bit Masks */
#define BP10G_I2C_CLK_IN    0x00000001
#define BP10G_I2C_CLK_OUT   0x00000002
#define BP10G_I2C_DATA_IN   0x00000004
#define BP10G_I2C_DATA_OUT  0x00000008

#define BP10G_ESDP                0x20

#define BP10G_SDP0_DIR            0x100
#define BP10G_SDP1_DIR            0x200
#define BP10G_SDP3_DIR            0x800
#define BP10G_SDP4_DIR            BIT_12
#define BP10G_SDP5_DIR            0x2000
#define BP10G_SDP0_DATA           0x001
#define BP10G_SDP1_DATA           0x002
#define BP10G_SDP3_DATA           0x008
#define BP10G_SDP4_DATA           0x010
#define BP10G_SDP5_DATA           0x020

#define BP10G_SDP2_DIR            0x400
#define BP10G_SDP2_DATA            0x4

#define BP10G_EODSDP              0x28

#define BP10G_SDP6_DATA_IN        0x001
#define BP10G_SDP6_DATA_OUT       0x002

#define BP10G_SDP7_DATA_IN        0x004
#define BP10G_SDP7_DATA_OUT       0x008

#define BP10G_MCLK_DATA_OUT       BP10G_SDP7_DATA_OUT
#define BP10G_MDIO_DATA_OUT       BP10G_SDP6_DATA_OUT
#define BP10G_MDIO_DATA_IN        BP10G_SDP6_DATA_IN

#define BP10G_MDIO_DATA           /*BP10G_SDP5_DATA*/ BP10G_SDP3_DATA
#define BP10G_MDIO_DIR            /*BP10G_SDP5_DIR*/  BP10G_SDP3_DATA

/*#define BP10G_MCLK_DATA_OUT9       BP10G_I2C_CLK_OUT
#define BP10G_MDIO_DATA_OUT9       BP10G_I2C_DATA_OUT*/

				       /*#define BP10G_MCLK_DATA_OUT9*//*BP10G_I2C_DATA_OUT */
#define BP10G_MDIO_DATA_OUT9           BP10G_I2C_DATA_OUT	/*BP10G_I2C_CLK_OUT */

/* VIA EOSDP ! */
#define BP10G_MCLK_DATA_OUT9           BP10G_SDP4_DATA
#define BP10G_MCLK_DIR_OUT9            BP10G_SDP4_DIR

/*#define BP10G_MDIO_DATA_IN9        BP10G_I2C_DATA_IN*/

#define BP10G_MDIO_DATA_IN9           BP10G_I2C_DATA_IN	/*BP10G_I2C_CLK_IN */

#define BP540_MDIO_DATA           /*BP10G_SDP5_DATA*/ BP10G_SDP0_DATA
#define BP540_MDIO_DIR            /*BP10G_SDP5_DIR*/  BP10G_SDP0_DIR
#define BP540_MCLK_DATA       BP10G_SDP2_DATA
#define BP540_MCLK_DIR       BP10G_SDP2_DIR

#define BP10G_WRITE_REG(a, reg, value) \
	(writel((value), (void *)(((a)->mem_map) + BP10G_##reg)))

#define BP10G_READ_REG(a, reg) ( \
	readl((void *)((a)->mem_map) + BP10G_##reg))

/*****BROADCOM*******************************************/

#define BP10GB_MISC_REG_GPIO						 0xa490
#define BP10GB_GPIO3_P0                              BIT_3
#define BP10GB_GPIO3_P1                              BIT_7

#define BP10GB_GPIO3_SET_P0                          BIT_11
#define BP10GB_GPIO3_CLR_P0                          BIT_19
#define BP10GB_GPIO3_OE_P0                           BIT_27

#define BP10GB_GPIO3_SET_P1                          BIT_15
#define BP10GB_GPIO3_CLR_P1                          BIT_23
#define BP10GB_GPIO3_OE_P1                           BIT_31

#define BP10GB_GPIO0_P1                              0x10
#define BP10GB_GPIO0_P0                              0x1
#define BP10GB_GPIO0_CLR_P0                          0x10000
#define BP10GB_GPIO0_CLR_P1                          0x100000
#define BP10GB_GPIO0_SET_P0                          0x100
#define BP10GB_GPIO0_SET_P1                          0x1000

#define BP10GB_GPIO0_OE_P1                           0x10000000
#define BP10GB_GPIO0_OE_P0                           0x1000000

#define BP10GB_MISC_REG_SPIO						 0xa4fc
#define BP10GB_GPIO4_OE                              BIT_28
#define BP10GB_GPIO5_OE                              BIT_29
#define BP10GB_GPIO4_CLR                             BIT_20
#define BP10GB_GPIO5_CLR                             BIT_21
#define BP10GB_GPIO4_SET                             BIT_12
#define BP10GB_GPIO5_SET                             BIT_13
#define BP10GB_GPIO4                                 BIT_4
#define BP10GB_GPIO5                                 BIT_5

#define BP10GB_MCLK_DIR  BP10GB_GPIO5_OE
#define BP10GB_MDIO_DIR  BP10GB_GPIO4_OE

#define BP10GB_MCLK_DATA BP10GB_GPIO5
#define BP10GB_MDIO_DATA BP10GB_GPIO4

#define BP10GB_MCLK_SET BP10GB_GPIO5_SET
#define BP10GB_MDIO_SET BP10GB_GPIO4_SET

#define BP10GB_MCLK_CLR BP10GB_GPIO5_CLR
#define BP10GB_MDIO_CLR BP10GB_GPIO4_CLR

#define BP10GB_WRITE_REG(a, reg, value) \
	(writel((value), (void *)(((a)->mem_map) + BP10GB_##reg)))

#define BP10GB_READ_REG(a, reg) ( \
	readl((void *)((a)->mem_map) + BP10GB_##reg))

#endif

int bp_proc_create(void);