2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * Purpose:Implement functions to access eeprom
28 * SROMbyReadEmbedded - Embedded read eeprom via MAC
29 * SROMbWriteEmbedded - Embedded write eeprom via MAC
30 * SROMvRegBitsOn - Set Bits On in eeprom
31 * SROMvRegBitsOff - Clear Bits Off in eeprom
32 * SROMbIsRegBitsOn - Test if Bits On in eeprom
33 * SROMbIsRegBitsOff - Test if Bits Off in eeprom
34 * SROMvReadAllContents - Read all contents in eeprom
35 * SROMvWriteAllContents - Write all contents in eeprom
36 * SROMvReadEtherAddress - Read Ethernet Address in eeprom
37 * SROMvWriteEtherAddress - Write Ethernet Address in eeprom
38 * SROMvReadSubSysVenId - Read Sub_VID and Sub_SysId in eeprom
39 * SROMbAutoLoad - Auto Load eeprom to MAC register
50 /*--------------------- Static Definitions -------------------------*/
52 /*--------------------- Static Classes ----------------------------*/
54 /*--------------------- Static Variables --------------------------*/
56 /*--------------------- Static Functions --------------------------*/
58 /*--------------------- Export Variables --------------------------*/
60 /*--------------------- Export Functions --------------------------*/
63 * Description: Read a byte from EEPROM, by MAC I2C
67 * dwIoBase - I/O base address
68 * byContntOffset - address of EEPROM
72 * Return Value: data read
75 unsigned char SROMbyReadEmbedded(void __iomem
*dwIoBase
, unsigned char byContntOffset
)
77 unsigned short wDelay
, wNoACK
;
83 VNSvInPortB(dwIoBase
+ MAC_REG_I2MCFG
, &byOrg
);
84 /* turn off hardware retry for getting NACK */
85 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCFG
, (byOrg
& (~I2MCFG_NORETRY
)));
86 for (wNoACK
= 0; wNoACK
< W_MAX_I2CRETRY
; wNoACK
++) {
87 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MTGID
, EEP_I2C_DEV_ID
);
88 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MTGAD
, byContntOffset
);
90 /* issue read command */
91 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCSR
, I2MCSR_EEMR
);
92 /* wait DONE be set */
93 for (wDelay
= 0; wDelay
< W_MAX_TIMEOUT
; wDelay
++) {
94 VNSvInPortB(dwIoBase
+ MAC_REG_I2MCSR
, &byWait
);
95 if (byWait
& (I2MCSR_DONE
| I2MCSR_NACK
))
97 PCAvDelayByIO(CB_DELAY_LOOP_WAIT
);
99 if ((wDelay
< W_MAX_TIMEOUT
) &&
100 (!(byWait
& I2MCSR_NACK
))) {
104 VNSvInPortB(dwIoBase
+ MAC_REG_I2MDIPT
, &byData
);
105 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCFG
, byOrg
);
110 * Description: Read all contents of eeprom to buffer
114 * dwIoBase - I/O base address
116 * pbyEepromRegs - EEPROM content Buffer
121 void SROMvReadAllContents(void __iomem
*dwIoBase
, unsigned char *pbyEepromRegs
)
125 /* ii = Rom Address */
126 for (ii
= 0; ii
< EEP_MAX_CONTEXT_SIZE
; ii
++) {
127 *pbyEepromRegs
= SROMbyReadEmbedded(dwIoBase
, (unsigned char)ii
);
133 * Description: Read Ethernet Address from eeprom to buffer
137 * dwIoBase - I/O base address
139 * pbyEtherAddress - Ethernet Address buffer
144 void SROMvReadEtherAddress(void __iomem
*dwIoBase
, unsigned char *pbyEtherAddress
)
148 /* ii = Rom Address */
149 for (ii
= 0; ii
< ETH_ALEN
; ii
++) {
150 *pbyEtherAddress
= SROMbyReadEmbedded(dwIoBase
, ii
);