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#ifndef _SMC91111_H_
42#define _SMC91111_H_
43
44#include <asm/types.h>
45#include <config.h>
46
47
48
49
50
51
52void smc_set_mac_addr (const unsigned char *addr);
53
54
55
56
57typedef unsigned char byte;
58typedef unsigned short word;
59typedef unsigned long int dword;
60
61struct smc91111_priv{
62 u8 dev_num;
63};
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79#define SMC_IO_EXTENT 16
80
81#ifdef CONFIG_PXA250
82
83#ifdef CONFIG_XSENGINE
84#define SMC_inl(a,r) (*((volatile dword *)((a)->iobase+((r)<<1))))
85#define SMC_inw(a,r) (*((volatile word *)((a)->iobase+((r)<<1))))
86#define SMC_inb(a,p) ({ \
87 unsigned int __p = (unsigned int)((a)->iobase + ((p)<<1)); \
88 unsigned int __v = *(volatile unsigned short *)((__p) & ~2); \
89 if (__p & 2) __v >>= 8; \
90 else __v &= 0xff; \
91 __v; })
92#elif defined(CONFIG_XAENIAX)
93#define SMC_inl(a,r) (*((volatile dword *)((a)->iobase+(r))))
94#define SMC_inw(a,z) ({ \
95 unsigned int __p = (unsigned int)((a)->iobase + (z)); \
96 unsigned int __v = *(volatile unsigned int *)((__p) & ~3); \
97 if (__p & 3) __v >>= 16; \
98 else __v &= 0xffff; \
99 __v; })
100#define SMC_inb(a,p) ({ \
101 unsigned int ___v = SMC_inw((a),(p) & ~1); \
102 if ((p) & 1) ___v >>= 8; \
103 else ___v &= 0xff; \
104 ___v; })
105#else
106#define SMC_inl(a,r) (*((volatile dword *)((a)->iobase+(r))))
107#define SMC_inw(a,r) (*((volatile word *)((a)->iobase+(r))))
108#define SMC_inb(a,p) ({ \
109 unsigned int __p = (unsigned int)((a)->iobase + (p)); \
110 unsigned int __v = *(volatile unsigned short *)((__p) & ~1); \
111 if (__p & 1) __v >>= 8; \
112 else __v &= 0xff; \
113 __v; })
114#endif
115
116#ifdef CONFIG_XSENGINE
117#define SMC_outl(a,d,r) (*((volatile dword *)((a)->iobase+(r<<1))) = d)
118#define SMC_outw(a,d,r) (*((volatile word *)((a)->iobase+(r<<1))) = d)
119#elif defined (CONFIG_XAENIAX)
120#define SMC_outl(a,d,r) (*((volatile dword *)((a)->iobase+(r))) = d)
121#define SMC_outw(a,d,p) ({ \
122 dword __dwo = SMC_inl((a),(p) & ~3); \
123 dword __dwn = (word)(d); \
124 __dwo &= ((p) & 3) ? 0x0000ffff : 0xffff0000; \
125 __dwo |= ((p) & 3) ? __dwn << 16 : __dwn; \
126 SMC_outl((a), __dwo, (p) & ~3); \
127})
128#else
129#define SMC_outl(a,d,r) (*((volatile dword *)((a)->iobase+(r))) = d)
130#define SMC_outw(a,d,r) (*((volatile word *)((a)->iobase+(r))) = d)
131#endif
132
133#define SMC_outb(a,d,r) ({ word __d = (byte)(d); \
134 word __w = SMC_inw((a),(r)&~1); \
135 __w &= ((r)&1) ? 0x00FF : 0xFF00; \
136 __w |= ((r)&1) ? __d<<8 : __d; \
137 SMC_outw((a),__w,(r)&~1); \
138 })
139
140#define SMC_outsl(a,r,b,l) ({ int __i; \
141 dword *__b2; \
142 __b2 = (dword *) b; \
143 for (__i = 0; __i < l; __i++) { \
144 SMC_outl((a), *(__b2 + __i), r); \
145 } \
146 })
147
148#define SMC_outsw(a,r,b,l) ({ int __i; \
149 word *__b2; \
150 __b2 = (word *) b; \
151 for (__i = 0; __i < l; __i++) { \
152 SMC_outw((a), *(__b2 + __i), r); \
153 } \
154 })
155
156#define SMC_insl(a,r,b,l) ({ int __i ; \
157 dword *__b2; \
158 __b2 = (dword *) b; \
159 for (__i = 0; __i < l; __i++) { \
160 *(__b2 + __i) = SMC_inl((a),(r)); \
161 SMC_inl((a),0); \
162 }; \
163 })
164
165#define SMC_insw(a,r,b,l) ({ int __i ; \
166 word *__b2; \
167 __b2 = (word *) b; \
168 for (__i = 0; __i < l; __i++) { \
169 *(__b2 + __i) = SMC_inw((a),(r)); \
170 SMC_inw((a),0); \
171 }; \
172 })
173
174#define SMC_insb(a,r,b,l) ({ int __i ; \
175 byte *__b2; \
176 __b2 = (byte *) b; \
177 for (__i = 0; __i < l; __i++) { \
178 *(__b2 + __i) = SMC_inb((a),(r)); \
179 SMC_inb((a),0); \
180 }; \
181 })
182
183#elif defined(CONFIG_LEON)
184
185#define SMC_LEON_SWAP16(_x_) ({ word _x = (_x_); ((_x << 8) | (_x >> 8)); })
186
187#define SMC_LEON_SWAP32(_x_) \
188 ({ dword _x = (_x_); \
189 ((_x << 24) | \
190 ((0x0000FF00UL & _x) << 8) | \
191 ((0x00FF0000UL & _x) >> 8) | \
192 (_x >> 24)); })
193
194#define SMC_inl(a,r) (SMC_LEON_SWAP32((*(volatile dword *)((a)->iobase+((r)<<0)))))
195#define SMC_inl_nosw(a,r) ((*(volatile dword *)((a)->iobase+((r)<<0))))
196#define SMC_inw(a,r) (SMC_LEON_SWAP16((*(volatile word *)((a)->iobase+((r)<<0)))))
197#define SMC_inw_nosw(a,r) ((*(volatile word *)((a)->iobase+((r)<<0))))
198#define SMC_inb(a,p) ({ \
199 word ___v = SMC_inw((a),(p) & ~1); \
200 if ((p) & 1) ___v >>= 8; \
201 else ___v &= 0xff; \
202 ___v; })
203
204#define SMC_outl(a,d,r) (*(volatile dword *)((a)->iobase+((r)<<0))=SMC_LEON_SWAP32(d))
205#define SMC_outl_nosw(a,d,r) (*(volatile dword *)((a)->iobase+((r)<<0))=(d))
206#define SMC_outw(a,d,r) (*(volatile word *)((a)->iobase+((r)<<0))=SMC_LEON_SWAP16(d))
207#define SMC_outw_nosw(a,d,r) (*(volatile word *)((a)->iobase+((r)<<0))=(d))
208#define SMC_outb(a,d,r) do{ word __d = (byte)(d); \
209 word __w = SMC_inw((a),(r)&~1); \
210 __w &= ((r)&1) ? 0x00FF : 0xFF00; \
211 __w |= ((r)&1) ? __d<<8 : __d; \
212 SMC_outw((a),__w,(r)&~1); \
213 }while(0)
214#define SMC_outsl(a,r,b,l) do{ int __i; \
215 dword *__b2; \
216 __b2 = (dword *) b; \
217 for (__i = 0; __i < l; __i++) { \
218 SMC_outl_nosw((a), *(__b2 + __i), r); \
219 } \
220 }while(0)
221#define SMC_outsw(a,r,b,l) do{ int __i; \
222 word *__b2; \
223 __b2 = (word *) b; \
224 for (__i = 0; __i < l; __i++) { \
225 SMC_outw_nosw((a), *(__b2 + __i), r); \
226 } \
227 }while(0)
228#define SMC_insl(a,r,b,l) do{ int __i ; \
229 dword *__b2; \
230 __b2 = (dword *) b; \
231 for (__i = 0; __i < l; __i++) { \
232 *(__b2 + __i) = SMC_inl_nosw((a),(r)); \
233 }; \
234 }while(0)
235
236#define SMC_insw(a,r,b,l) do{ int __i ; \
237 word *__b2; \
238 __b2 = (word *) b; \
239 for (__i = 0; __i < l; __i++) { \
240 *(__b2 + __i) = SMC_inw_nosw((a),(r)); \
241 }; \
242 }while(0)
243
244#define SMC_insb(a,r,b,l) do{ int __i ; \
245 byte *__b2; \
246 __b2 = (byte *) b; \
247 for (__i = 0; __i < l; __i++) { \
248 *(__b2 + __i) = SMC_inb((a),(r)); \
249 }; \
250 }while(0)
251
252#else
253
254#ifndef CONFIG_SMC_USE_IOFUNCS
255
256
257
258
259#ifdef CONFIG_ADNPESC1
260#define SMC_inw(a,r) (*((volatile word *)((a)->iobase+((r)<<1))))
261#elif CONFIG_BLACKFIN
262#define SMC_inw(a,r) ({ word __v = (*((volatile word *)((a)->iobase+(r)))); SSYNC(); __v;})
263#else
264#define SMC_inw(a,r) (*((volatile word *)((a)->iobase+(r))))
265#endif
266#define SMC_inb(a,r) (((r)&1) ? SMC_inw((a),(r)&~1)>>8 : SMC_inw((a),(r)&0xFF))
267
268#ifdef CONFIG_ADNPESC1
269#define SMC_outw(a,d,r) (*((volatile word *)((a)->iobase+((r)<<1))) = d)
270#elif CONFIG_BLACKFIN
271#define SMC_outw(a,d,r) {(*((volatile word *)((a)->iobase+(r))) = d); SSYNC();}
272#else
273#define SMC_outw(a,d,r) (*((volatile word *)((a)->iobase+(r))) = d)
274#endif
275#define SMC_outb(a,d,r) ({ word __d = (byte)(d); \
276 word __w = SMC_inw((a),(r)&~1); \
277 __w &= ((r)&1) ? 0x00FF : 0xFF00; \
278 __w |= ((r)&1) ? __d<<8 : __d; \
279 SMC_outw((a),__w,(r)&~1); \
280 })
281#if 0
282#define SMC_outsw(a,r,b,l) outsw((a)->iobase+(r), (b), (l))
283#else
284#define SMC_outsw(a,r,b,l) ({ int __i; \
285 word *__b2; \
286 __b2 = (word *) b; \
287 for (__i = 0; __i < l; __i++) { \
288 SMC_outw((a), *(__b2 + __i), r); \
289 } \
290 })
291#endif
292
293#if 0
294#define SMC_insw(a,r,b,l) insw((a)->iobase+(r), (b), (l))
295#else
296#define SMC_insw(a,r,b,l) ({ int __i ; \
297 word *__b2; \
298 __b2 = (word *) b; \
299 for (__i = 0; __i < l; __i++) { \
300 *(__b2 + __i) = SMC_inw((a),(r)); \
301 SMC_inw((a),0); \
302 }; \
303 })
304#endif
305
306#endif
307
308#if defined(CONFIG_SMC_USE_32_BIT)
309
310#ifdef CONFIG_XSENGINE
311#define SMC_inl(a,r) (*((volatile dword *)((a)->iobase+(r<<1))))
312#else
313#define SMC_inl(a,r) (*((volatile dword *)((a)->iobase+(r))))
314#endif
315
316#define SMC_insl(a,r,b,l) ({ int __i ; \
317 dword *__b2; \
318 __b2 = (dword *) b; \
319 for (__i = 0; __i < l; __i++) { \
320 *(__b2 + __i) = SMC_inl((a),(r)); \
321 SMC_inl((a),0); \
322 }; \
323 })
324
325#ifdef CONFIG_XSENGINE
326#define SMC_outl(a,d,r) (*((volatile dword *)((a)->iobase+(r<<1))) = d)
327#else
328#define SMC_outl(a,d,r) (*((volatile dword *)((a)->iobase+(r))) = d)
329#endif
330#define SMC_outsl(a,r,b,l) ({ int __i; \
331 dword *__b2; \
332 __b2 = (dword *) b; \
333 for (__i = 0; __i < l; __i++) { \
334 SMC_outl((a), *(__b2 + __i), r); \
335 } \
336 })
337
338#endif
339
340#endif
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362#define BANK_SELECT 14
363
364
365
366#define TCR_REG 0x0000
367#define TCR_ENABLE 0x0001
368#define TCR_LOOP 0x0002
369#define TCR_FORCOL 0x0004
370#define TCR_PAD_EN 0x0080
371#define TCR_NOCRC 0x0100
372#define TCR_MON_CSN 0x0400
373#define TCR_FDUPLX 0x0800
374#define TCR_STP_SQET 0x1000
375#define TCR_EPH_LOOP 0x2000
376#define TCR_SWFDUP 0x8000
377
378#define TCR_CLEAR 0
379
380
381#define TCR_DEFAULT TCR_ENABLE
382
383
384
385
386#define EPH_STATUS_REG 0x0002
387#define ES_TX_SUC 0x0001
388#define ES_SNGL_COL 0x0002
389#define ES_MUL_COL 0x0004
390#define ES_LTX_MULT 0x0008
391#define ES_16COL 0x0010
392#define ES_SQET 0x0020
393#define ES_LTXBRD 0x0040
394#define ES_TXDEFR 0x0080
395#define ES_LATCOL 0x0200
396#define ES_LOSTCARR 0x0400
397#define ES_EXC_DEF 0x0800
398#define ES_CTR_ROL 0x1000
399#define ES_LINK_OK 0x4000
400#define ES_TXUNRN 0x8000
401
402
403
404
405#define RCR_REG 0x0004
406#define RCR_RX_ABORT 0x0001
407#define RCR_PRMS 0x0002
408#define RCR_ALMUL 0x0004
409#define RCR_RXEN 0x0100
410#define RCR_STRIP_CRC 0x0200
411#define RCR_ABORT_ENB 0x0200
412#define RCR_FILT_CAR 0x0400
413#define RCR_SOFTRST 0x8000
414
415
416#define RCR_DEFAULT (RCR_STRIP_CRC | RCR_RXEN)
417#define RCR_CLEAR 0x0
418
419
420
421#define COUNTER_REG 0x0006
422
423
424
425#define MIR_REG 0x0008
426
427
428
429#define RPC_REG 0x000A
430#define RPC_SPEED 0x2000
431#define RPC_DPLX 0x1000
432#define RPC_ANEG 0x0800
433#define RPC_LSXA_SHFT 5
434#define RPC_LSXB_SHFT 2
435#define RPC_LED_100_10 (0x00)
436#define RPC_LED_RES (0x01)
437#define RPC_LED_10 (0x02)
438#define RPC_LED_FD (0x03)
439#define RPC_LED_TX_RX (0x04)
440#define RPC_LED_100 (0x05)
441#define RPC_LED_TX (0x06)
442#define RPC_LED_RX (0x07)
443#if defined(CONFIG_DK1C20) || defined(CONFIG_DK1S10)
444
445#define RPC_DEFAULT ( RPC_SPEED | RPC_DPLX | RPC_ANEG \
446 | (RPC_LED_TX_RX << RPC_LSXA_SHFT) \
447 | (RPC_LED_100_10 << RPC_LSXB_SHFT) )
448#elif defined(CONFIG_ADNPESC1)
449
450#define RPC_DEFAULT ( RPC_SPEED | RPC_DPLX | RPC_ANEG \
451 | (RPC_LED_TX_RX << RPC_LSXA_SHFT) \
452 | (RPC_LED_100_10 << RPC_LSXB_SHFT) )
453#else
454
455#define RPC_DEFAULT ( RPC_SPEED | RPC_DPLX | RPC_ANEG \
456 | (RPC_LED_100_10 << RPC_LSXA_SHFT) \
457 | (RPC_LED_TX_RX << RPC_LSXB_SHFT) )
458#endif
459
460
461
462
463
464#define BSR_REG 0x000E
465
466
467
468
469#define CONFIG_REG 0x0000
470#define CONFIG_EXT_PHY 0x0200
471#define CONFIG_GPCNTRL 0x0400
472#define CONFIG_NO_WAIT 0x1000
473#define CONFIG_EPH_POWER_EN 0x8000
474
475
476#define CONFIG_DEFAULT (CONFIG_EPH_POWER_EN)
477
478
479
480
481#define BASE_REG 0x0002
482
483
484
485
486#define ADDR0_REG 0x0004
487#define ADDR1_REG 0x0006
488#define ADDR2_REG 0x0008
489
490
491
492
493#define GP_REG 0x000A
494
495
496
497
498#define CTL_REG 0x000C
499#define CTL_RCV_BAD 0x4000
500#define CTL_AUTO_RELEASE 0x0800
501#define CTL_LE_ENABLE 0x0080
502#define CTL_CR_ENABLE 0x0040
503#define CTL_TE_ENABLE 0x0020
504#define CTL_EEPROM_SELECT 0x0004
505#define CTL_RELOAD 0x0002
506#define CTL_STORE 0x0001
507#define CTL_DEFAULT (0x1A10)
508
509
510
511#define MMU_CMD_REG 0x0000
512#define MC_BUSY 1
513#define MC_NOP (0<<5)
514#define MC_ALLOC (1<<5)
515#define MC_RESET (2<<5)
516#define MC_REMOVE (3<<5)
517#define MC_RELEASE (4<<5)
518#define MC_FREEPKT (5<<5)
519#define MC_ENQUEUE (6<<5)
520#define MC_RSTTXFIFO (7<<5)
521
522
523
524
525#define PN_REG 0x0002
526
527
528
529
530#define AR_REG 0x0003
531#define AR_FAILED 0x80
532
533
534
535
536#define RXFIFO_REG 0x0004
537#define RXFIFO_REMPTY 0x8000
538
539
540
541
542#define TXFIFO_REG RXFIFO_REG
543#define TXFIFO_TEMPTY 0x80
544
545
546
547
548#define PTR_REG 0x0006
549#define PTR_RCV 0x8000
550#define PTR_AUTOINC 0x4000
551#define PTR_READ 0x2000
552#define PTR_NOTEMPTY 0x0800
553
554
555
556
557#define SMC91111_DATA_REG 0x0008
558
559
560
561
562#define SMC91111_INT_REG 0x000C
563
564
565
566
567#define IM_REG 0x000D
568#define IM_MDINT 0x80
569#define IM_ERCV_INT 0x40
570#define IM_EPH_INT 0x20
571#define IM_RX_OVRN_INT 0x10
572#define IM_ALLOC_INT 0x08
573#define IM_TX_EMPTY_INT 0x04
574#define IM_TX_INT 0x02
575#define IM_RCV_INT 0x01
576
577
578
579
580#define MCAST_REG1 0x0000
581#define MCAST_REG2 0x0002
582#define MCAST_REG3 0x0004
583#define MCAST_REG4 0x0006
584
585
586
587
588#define MII_REG 0x0008
589#define MII_MSK_CRS100 0x4000
590#define MII_MDOE 0x0008
591#define MII_MCLK 0x0004
592#define MII_MDI 0x0002
593#define MII_MDO 0x0001
594
595
596
597
598#define REV_REG 0x000A
599
600
601
602
603
604#define ERCV_REG 0x000C
605#define ERCV_RCV_DISCRD 0x0080
606#define ERCV_THRESHOLD 0x001F
607
608
609
610#define EXT_REG 0x0000
611
612
613#define CHIP_9192 3
614#define CHIP_9194 4
615#define CHIP_9195 5
616#define CHIP_9196 6
617#define CHIP_91100 7
618#define CHIP_91100FD 8
619#define CHIP_91111FD 9
620
621#if 0
622static const char * chip_ids[ 15 ] = {
623 NULL, NULL, NULL,
624 "SMC91C90/91C92",
625 "SMC91C94",
626 "SMC91C95",
627 "SMC91C96",
628 "SMC91C100",
629 "SMC91C100FD",
630 "SMC91C111",
631 NULL, NULL,
632 NULL, NULL, NULL};
633#endif
634
635
636
637
638#define TS_SUCCESS 0x0001
639#define TS_LOSTCAR 0x0400
640#define TS_LATCOL 0x0200
641#define TS_16COL 0x0010
642
643
644
645
646#define RS_ALGNERR 0x8000
647#define RS_BRODCAST 0x4000
648#define RS_BADCRC 0x2000
649#define RS_ODDFRAME 0x1000
650#define RS_TOOLONG 0x0800
651#define RS_TOOSHORT 0x0400
652#define RS_MULTICAST 0x0001
653#define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)
654
655
656
657enum {
658 PHY_LAN83C183 = 1,
659 PHY_LAN83C180
660};
661
662
663
664
665
666#define PHY_CNTL_REG 0x00
667#define PHY_CNTL_RST 0x8000
668#define PHY_CNTL_LPBK 0x4000
669#define PHY_CNTL_SPEED 0x2000
670#define PHY_CNTL_ANEG_EN 0x1000
671#define PHY_CNTL_PDN 0x0800
672#define PHY_CNTL_MII_DIS 0x0400
673#define PHY_CNTL_ANEG_RST 0x0200
674#define PHY_CNTL_DPLX 0x0100
675#define PHY_CNTL_COLTST 0x0080
676
677
678#define PHY_STAT_REG 0x01
679#define PHY_STAT_CAP_T4 0x8000
680#define PHY_STAT_CAP_TXF 0x4000
681#define PHY_STAT_CAP_TXH 0x2000
682#define PHY_STAT_CAP_TF 0x1000
683#define PHY_STAT_CAP_TH 0x0800
684#define PHY_STAT_CAP_SUPR 0x0040
685#define PHY_STAT_ANEG_ACK 0x0020
686#define PHY_STAT_REM_FLT 0x0010
687#define PHY_STAT_CAP_ANEG 0x0008
688#define PHY_STAT_LINK 0x0004
689#define PHY_STAT_JAB 0x0002
690#define PHY_STAT_EXREG 0x0001
691
692
693#define PHY_ID1_REG 0x02
694#define PHY_ID2_REG 0x03
695
696
697#define PHY_AD_REG 0x04
698#define PHY_AD_NP 0x8000
699#define PHY_AD_ACK 0x4000
700#define PHY_AD_RF 0x2000
701#define PHY_AD_T4 0x0200
702#define PHY_AD_TX_FDX 0x0100
703#define PHY_AD_TX_HDX 0x0080
704#define PHY_AD_10_FDX 0x0040
705#define PHY_AD_10_HDX 0x0020
706#define PHY_AD_CSMA 0x0001
707
708
709#define PHY_RMT_REG 0x05
710
711
712
713#define PHY_CFG1_REG 0x10
714#define PHY_CFG1_LNKDIS 0x8000
715#define PHY_CFG1_XMTDIS 0x4000
716#define PHY_CFG1_XMTPDN 0x2000
717#define PHY_CFG1_BYPSCR 0x0400
718#define PHY_CFG1_UNSCDS 0x0200
719#define PHY_CFG1_EQLZR 0x0100
720#define PHY_CFG1_CABLE 0x0080
721#define PHY_CFG1_RLVL0 0x0040
722#define PHY_CFG1_TLVL_SHIFT 2
723#define PHY_CFG1_TLVL_MASK 0x003C
724#define PHY_CFG1_TRF_MASK 0x0003
725
726
727
728#define PHY_CFG2_REG 0x11
729#define PHY_CFG2_APOLDIS 0x0020
730#define PHY_CFG2_JABDIS 0x0010
731#define PHY_CFG2_MREG 0x0008
732#define PHY_CFG2_INTMDIO 0x0004
733
734
735#define PHY_INT_REG 0x12
736#define PHY_INT_INT 0x8000
737#define PHY_INT_LNKFAIL 0x4000
738#define PHY_INT_LOSSSYNC 0x2000
739#define PHY_INT_CWRD 0x1000
740#define PHY_INT_SSD 0x0800
741#define PHY_INT_ESD 0x0400
742#define PHY_INT_RPOL 0x0200
743#define PHY_INT_JAB 0x0100
744#define PHY_INT_SPDDET 0x0080
745#define PHY_INT_DPLXDET 0x0040
746
747
748#define PHY_MASK_REG 0x13
749
750
751
752
753
754
755
756
757
758
759#define SMC_SELECT_BANK(a,x) { SMC_outw((a), (x), BANK_SELECT ); }
760
761
762#define SMC_ENABLE_INT(a,x) {\
763 unsigned char mask;\
764 SMC_SELECT_BANK((a),2);\
765 mask = SMC_inb((a), IM_REG );\
766 mask |= (x);\
767 SMC_outb( (a), mask, IM_REG ); \
768}
769
770
771
772#define SMC_DISABLE_INT(a,x) {\
773 unsigned char mask;\
774 SMC_SELECT_BANK(2);\
775 mask = SMC_inb( (a), IM_REG );\
776 mask &= ~(x);\
777 SMC_outb( (a), mask, IM_REG ); \
778}
779
780
781
782
783
784
785
786
787
788
789#define SMC_INTERRUPT_MASK (IM_EPH_INT | IM_RX_OVRN_INT | IM_RCV_INT | \
790 IM_MDINT)
791
792#endif
793