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
,
76 unsigned char byContntOffset
)
78 unsigned short wDelay
, wNoACK
;
84 VNSvInPortB(dwIoBase
+ MAC_REG_I2MCFG
, &byOrg
);
85 /* turn off hardware retry for getting NACK */
86 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCFG
, (byOrg
& (~I2MCFG_NORETRY
)));
87 for (wNoACK
= 0; wNoACK
< W_MAX_I2CRETRY
; wNoACK
++) {
88 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MTGID
, EEP_I2C_DEV_ID
);
89 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MTGAD
, byContntOffset
);
91 /* issue read command */
92 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCSR
, I2MCSR_EEMR
);
93 /* wait DONE be set */
94 for (wDelay
= 0; wDelay
< W_MAX_TIMEOUT
; wDelay
++) {
95 VNSvInPortB(dwIoBase
+ MAC_REG_I2MCSR
, &byWait
);
96 if (byWait
& (I2MCSR_DONE
| I2MCSR_NACK
))
98 PCAvDelayByIO(CB_DELAY_LOOP_WAIT
);
100 if ((wDelay
< W_MAX_TIMEOUT
) &&
101 (!(byWait
& I2MCSR_NACK
))) {
105 VNSvInPortB(dwIoBase
+ MAC_REG_I2MDIPT
, &byData
);
106 VNSvOutPortB(dwIoBase
+ MAC_REG_I2MCFG
, byOrg
);
111 * Description: Read all contents of eeprom to buffer
115 * dwIoBase - I/O base address
117 * pbyEepromRegs - EEPROM content Buffer
122 void SROMvReadAllContents(void __iomem
*dwIoBase
, unsigned char *pbyEepromRegs
)
126 /* ii = Rom Address */
127 for (ii
= 0; ii
< EEP_MAX_CONTEXT_SIZE
; ii
++) {
128 *pbyEepromRegs
= SROMbyReadEmbedded(dwIoBase
,
135 * Description: Read Ethernet Address from eeprom to buffer
139 * dwIoBase - I/O base address
141 * pbyEtherAddress - Ethernet Address buffer
146 void SROMvReadEtherAddress(void __iomem
*dwIoBase
,
147 unsigned char *pbyEtherAddress
)
151 /* ii = Rom Address */
152 for (ii
= 0; ii
< ETH_ALEN
; ii
++) {
153 *pbyEtherAddress
= SROMbyReadEmbedded(dwIoBase
, ii
);