Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*------------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  . smc9194.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  . Copyright (C) 1996 by Erik Stahlman
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  . This software may be used and distributed according to the terms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  . of the GNU General Public License, incorporated herein by reference.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  . This file contains register information and access macros for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  . the SMC91xxx chipset.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  . Information contained in this file was obtained from the SMC91C94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  . manual from SMC.  To get a copy, if you really want one, you can find
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  . information under www.smc.com in the components division.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  . ( this thanks to advice from Donald Becker ).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  . Authors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  . 	Erik Stahlman				( erik@vt.edu )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  . History
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  . 01/06/96		 Erik Stahlman   moved definitions here from main .c file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)  . 01/19/96		 Erik Stahlman	  polished this up some, and added better
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)  .										  error handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  ---------------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #ifndef _SMC9194_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define _SMC9194_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) /* I want some simple types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) typedef unsigned char			byte;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) typedef unsigned short			word;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) typedef unsigned long int 		dword;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) /* Because of bank switching, the SMC91xxx uses only 16 I/O ports */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define SMC_IO_EXTENT	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) /*---------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  . A description of the SMC registers is probably in order here,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  . although for details, the SMC datasheet is invaluable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  . Basically, the chip has 4 banks of registers ( 0 to 3 ), which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  . are accessed by writing a number into the BANK_SELECT register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  . ( I also use a SMC_SELECT_BANK macro for this ).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)  . The banks are configured so that for most purposes, bank 2 is all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)  . that is needed for simple run time tasks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)  -----------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)  . Bank Select Register:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  .		yyyy yyyy 0000 00xx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)  .		xx 		= bank number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)  .		yyyy yyyy	= 0x33, for identification purposes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define	BANK_SELECT		14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) /* BANK 0  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define	TCR 		0    	/* transmit control register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define TCR_ENABLE	0x0001	/* if this is 1, we can transmit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define TCR_FDUPLX    	0x0800  /* receive packets sent out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define TCR_STP_SQET	0x1000	/* stop transmitting if Signal quality error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define	TCR_MON_CNS	0x0400	/* monitors the carrier status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define	TCR_PAD_ENABLE	0x0080	/* pads short packets to 64 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define	TCR_CLEAR	0	/* do NOTHING */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) /* the normal settings for the TCR register : */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) /* QUESTION: do I want to enable padding of short packets ? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define	TCR_NORMAL  	TCR_ENABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define EPH_STATUS	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define ES_LINK_OK	0x4000	/* is the link integrity ok ? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define	RCR		4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define RCR_SOFTRESET	0x8000 	/* resets the chip */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define	RCR_STRIP_CRC	0x200	/* strips CRC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define RCR_ENABLE	0x100	/* IFF this is set, we can receive packets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define RCR_ALMUL	0x4 	/* receive all multicast packets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define	RCR_PROMISC	0x2	/* enable promiscuous mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) /* the normal settings for the RCR register : */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define	RCR_NORMAL	(RCR_STRIP_CRC | RCR_ENABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define RCR_CLEAR	0x0		/* set it to a base state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define	COUNTER		6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define	MIR		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define	MCR		10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) /* 12 is reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) /* BANK 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define CONFIG			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define CFG_AUI_SELECT	 	0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define	BASE			2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define	ADDR0			4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define	ADDR1			6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define	ADDR2			8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define	GENERAL			10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define	CONTROL			12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define	CTL_POWERDOWN		0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define	CTL_LE_ENABLE		0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define	CTL_CR_ENABLE		0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define	CTL_TE_ENABLE		0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define CTL_AUTO_RELEASE	0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define	CTL_EPROM_ACCESS	0x0003 /* high if Eprom is being read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) /* BANK 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define MMU_CMD		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define MC_BUSY		1	/* only readable bit in the register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define MC_NOP		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define	MC_ALLOC	0x20  	/* or with number of 256 byte packets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define	MC_RESET	0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define	MC_REMOVE	0x60  	/* remove the current rx packet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define MC_RELEASE  	0x80  	/* remove and release the current rx packet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define MC_FREEPKT  	0xA0  	/* Release packet in PNR register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define MC_ENQUEUE	0xC0 	/* Enqueue the packet for transmit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define	PNR_ARR		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define FIFO_PORTS	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define FP_RXEMPTY  0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define FP_TXEMPTY  0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define	POINTER		6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define PTR_READ	0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define	PTR_RCV		0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define	PTR_AUTOINC 	0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define PTR_AUTO_INC	0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define	DATA_1		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define	DATA_2		10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define	INTERRUPT	12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define INT_MASK	13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define IM_RCV_INT	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define	IM_TX_INT	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define	IM_TX_EMPTY_INT	0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define	IM_ALLOC_INT	0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define	IM_RX_OVRN_INT	0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define	IM_EPH_INT	0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define	IM_ERCV_INT	0x40 /* not on SMC9192 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /* BANK 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define	MULTICAST1	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define	MULTICAST2	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define	MULTICAST3	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define	MULTICAST4	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define	MGMT		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define	REVISION	10 /* ( hi: chip id   low: rev # ) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) /* this is NOT on SMC9192 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define	ERCV		12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define CHIP_9190	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define CHIP_9194	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define CHIP_9195	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define CHIP_91100	7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) static const char * chip_ids[ 15 ] =  {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	NULL, NULL, NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	/* 3 */ "SMC91C90/91C92",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	/* 4 */ "SMC91C94",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	/* 5 */ "SMC91C95",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	/* 7 */ "SMC91C100",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	/* 8 */ "SMC91C100FD",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	NULL, NULL, NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	NULL, NULL, NULL};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)  . Transmit status bits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define TS_SUCCESS 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define TS_LOSTCAR 0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define TS_LATCOL  0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define TS_16COL   0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)  . Receive status bits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define RS_ALGNERR	0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define RS_BADCRC	0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define RS_ODDFRAME	0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define RS_TOOLONG	0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define RS_TOOSHORT	0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define RS_MULTICAST	0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define RS_ERRORS	(RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) static const char * interfaces[ 2 ] = { "TP", "AUI" };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) /*-------------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)  .  I define some macros to make it easier to do somewhat common
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)  . or slightly complicated, repeated tasks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)  --------------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) /* select a register bank, 0 to 3  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define SMC_SELECT_BANK(x)  { outw( x, ioaddr + BANK_SELECT ); }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /* define a small delay for the reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define SMC_DELAY() { inw( ioaddr + RCR );\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 			inw( ioaddr + RCR );\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 			inw( ioaddr + RCR );  }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* this enables an interrupt in the interrupt mask register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define SMC_ENABLE_INT(x) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		unsigned char mask;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 		SMC_SELECT_BANK(2);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 		mask = inb( ioaddr + INT_MASK );\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		mask |= (x);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 		outb( mask, ioaddr + INT_MASK ); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) /* this disables an interrupt from the interrupt mask register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define SMC_DISABLE_INT(x) {\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 		unsigned char mask;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 		SMC_SELECT_BANK(2);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 		mask = inb( ioaddr + INT_MASK );\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 		mask &= ~(x);\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 		outb( mask, ioaddr + INT_MASK ); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /*----------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)  . Define the interrupts that I want to receive from the card
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)  .
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)  . I want:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)  .  IM_EPH_INT, for nasty errors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)  .  IM_RCV_INT, for happy received packets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)  .  IM_RX_OVRN_INT, because I have to kick the receiver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  --------------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define SMC_INTERRUPT_MASK   (IM_EPH_INT | IM_RX_OVRN_INT | IM_RCV_INT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #endif  /* _SMC_9194_H_ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)