From: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: netdev@oss.sgi.com
Subject: [PATCH] 1/5: eepro: cache EEPROM values
Date: Fri, 7 Jan 2005 09:47:18 -0200 [thread overview]
Message-ID: <20050107114718.GS27328@cathedrallabs.org> (raw)
eepro: cache EEPROM values
Signed-off-by: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
--- 2.6-inc/drivers/net/eepro.c 2004-09-13 15:54:43.000000000 -0300
+++ 2.6-foo/drivers/net/eepro.c 2004-09-14 13:46:15.000000000 -0300
@@ -214,6 +214,7 @@ struct eepro_local {
short rcv_lower_limit;
short rcv_upper_limit;
unsigned char eeprom_reg;
+ unsigned short word[8];
};
/* The station (ethernet) address prefix, used for IDing the board. */
@@ -608,16 +609,22 @@ out:
}
#endif
-static void __init printEEPROMInfo(short ioaddr, struct net_device *dev)
+static void __init printEEPROMInfo(struct net_device *dev)
{
+ struct eepro_local *lp = (struct eepro_local *)dev->priv;
+ int ioaddr = dev->base_addr;
unsigned short Word;
int i,j;
- for (i=0, j=ee_Checksum; i<ee_SIZE; i++)
- j+=read_eeprom(ioaddr,i,dev);
+ j = ee_Checksum;
+ for (i = 0; i < 8; i++)
+ j += lp->word[i];
+ for ( ; i < ee_SIZE; i++)
+ j += read_eeprom(ioaddr, i, dev);
+
printk(KERN_DEBUG "Checksum: %#x\n",j&0xffff);
- Word=read_eeprom(ioaddr, 0, dev);
+ Word = lp->word[0];
printk(KERN_DEBUG "Word0:\n");
printk(KERN_DEBUG " Plug 'n Pray: %d\n",GetBit(Word,ee_PnP));
printk(KERN_DEBUG " Buswidth: %d\n",(GetBit(Word,ee_BusWidth)+1)*8 );
@@ -625,7 +632,7 @@ static void __init printEEPROMInfo(short
printk(KERN_DEBUG " IO Address: %#x\n", (Word>>ee_IO0)<<4);
if (net_debug>4) {
- Word=read_eeprom(ioaddr, 1, dev);
+ Word = lp->word[1];
printk(KERN_DEBUG "Word1:\n");
printk(KERN_DEBUG " INT: %d\n", Word & ee_IntMask);
printk(KERN_DEBUG " LI: %d\n", GetBit(Word,ee_LI));
@@ -636,7 +643,7 @@ static void __init printEEPROMInfo(short
printk(KERN_DEBUG " Duplex: %d\n", GetBit(Word,ee_Duplex));
}
- Word=read_eeprom(ioaddr, 5, dev);
+ Word = lp->word[5];
printk(KERN_DEBUG "Word5:\n");
printk(KERN_DEBUG " BNC: %d\n",GetBit(Word,ee_BNC_TPE));
printk(KERN_DEBUG " NumConnectors: %d\n",GetBit(Word,ee_NumConn));
@@ -646,12 +653,12 @@ static void __init printEEPROMInfo(short
if (GetBit(Word,ee_PortAUI)) printk(KERN_DEBUG "AUI ");
printk(KERN_DEBUG "port(s) \n");
- Word=read_eeprom(ioaddr, 6, dev);
+ Word = lp->word[6];
printk(KERN_DEBUG "Word6:\n");
printk(KERN_DEBUG " Stepping: %d\n",Word & ee_StepMask);
printk(KERN_DEBUG " BoardID: %d\n",Word>>ee_BoardID);
- Word=read_eeprom(ioaddr, 7, dev);
+ Word = lp->word[7];
printk(KERN_DEBUG "Word7:\n");
printk(KERN_DEBUG " INT to IRQ:\n");
@@ -725,7 +732,7 @@ static void __init eepro_print_info (str
printk(", %s.\n", ifmap[dev->if_port]);
if (net_debug > 3) {
- i = read_eeprom(dev->base_addr, 5, dev);
+ i = lp->word[5];
if (i & 0x2000) /* bit 13 of EEPROM word 5 */
printk(KERN_DEBUG "%s: Concurrent Processing is "
"enabled but not used!\n", dev->name);
@@ -733,7 +740,7 @@ static void __init eepro_print_info (str
/* Check the station address for the manufacturer's code */
if (net_debug>3)
- printEEPROMInfo(dev->base_addr, dev);
+ printEEPROMInfo(dev);
}
/* This is the real probe routine. Linux has a history of friendly device
@@ -796,11 +803,16 @@ static int __init eepro_probe1(struct ne
lp->xmt_bar = XMT_BAR_10;
station_addr[0] = read_eeprom(ioaddr, 2, dev);
}
- station_addr[1] = read_eeprom(ioaddr, 3, dev);
- station_addr[2] = read_eeprom(ioaddr, 4, dev);
+
+ /* get all words at once. will be used here and for ethtool */
+ for (i = 0; i < 8; i++) {
+ lp->word[i] = read_eeprom(ioaddr, i, dev);
+ }
+ station_addr[1] = lp->word[3];
+ station_addr[2] = lp->word[4];
if (!lp->eepro) {
- if (read_eeprom(ioaddr,7,dev)== ee_FX_INT2IRQ)
+ if (lp->word[7] == ee_FX_INT2IRQ)
lp->eepro = 2;
else if (station_addr[2] == SA_ADDR1)
lp->eepro = 1;
@@ -817,15 +829,15 @@ static int __init eepro_probe1(struct ne
/* calculate {xmt,rcv}_{lower,upper}_limit */
eepro_recalc(dev);
- if (GetBit( read_eeprom(ioaddr, 5, dev),ee_BNC_TPE))
+ if (GetBit(lp->word[5], ee_BNC_TPE))
dev->if_port = BNC;
else
dev->if_port = TPE;
if (dev->irq < 2 && lp->eepro != 0) {
/* Mask off INT number */
- int count = read_eeprom(ioaddr, 1, dev) & 7;
- unsigned irqMask = read_eeprom(ioaddr, 7, dev);
+ int count = lp->word[1] & 7;
+ unsigned irqMask = lp->word[7];
while (count--)
irqMask &= irqMask - 1;
@@ -941,7 +953,7 @@ static int eepro_open(struct net_device
if (net_debug > 3)
printk(KERN_DEBUG "%s: entering eepro_open routine.\n", dev->name);
- irqMask = read_eeprom(ioaddr,7,dev);
+ irqMask = lp->word[7];
if (lp->eepro == LAN595FX_10ISA) {
if (net_debug > 3) printk(KERN_DEBUG "p->eepro = 3;\n");
next reply other threads:[~2005-01-07 11:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-07 11:47 Aristeu Sergio Rozanski Filho [this message]
2005-01-07 11:54 ` [PATCH] 1/5: eepro: cache EEPROM values Aristeu Sergio Rozanski Filho
-- strict thread matches above, loose matches on Subject: below --
2004-11-18 23:40 Aristeu Sergio Rozanski Filho
2005-01-07 3:51 ` Jeff Garzik
2005-01-07 11:13 ` Aristeu Sergio Rozanski Filho
2005-01-07 11:23 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050107114718.GS27328@cathedrallabs.org \
--to=aris@cathedrallabs.org \
--cc=jgarzik@pobox.com \
--cc=netdev@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).