ソースを参照

3c90x driver fix (legacy) from Geert Staapers

From: Geert Stappers <stappers@stappers.nl>
To: etherboot-developers@lists.sourceforge.net
Subject: [Etherboot-developers] 3c90x polling again [patch]
Date: Thu, 29 Nov 2007 09:22:36 +0100
User-Agent: Mutt/1.5.16 (2007-06-11)

Hello,

gPXE didn't work on 3COM 905C Tornado cards for me.
It did transmit the DHCP request, but it didn't see the DHCP offer.

Adding debug print statements allready solved the problem.
Attached is a patch that has a cleaner delay then print statements.
The core of it is
-    for(i=0;i<40000;i++);
+    mdelay(1);

There was no research if the change is about a longer delay
or about code NOT being optimized away. It works for me   :-)

Cheers
Geert Stappers
tags/v0.9.3
Marty Connor 16年前
コミット
9d4e4dbc32
1個のファイルの変更6行の追加4行の削除
  1. 6
    4
      src/drivers/net/3c90x.c

+ 6
- 4
src/drivers/net/3c90x.c ファイルの表示

@@ -34,6 +34,8 @@
34 34
  * v2.01    5-26-2003 NN Fixed driver alignment issue which
35 35
  *                  caused system lockups if driver structures
36 36
  *                  not 8-byte aligned.
37
+ * v2.02   11-28-2007 GSt Got polling working again by replacing
38
+ * 			"for(i=0;i<40000;i++);" with "mdelay(1);"
37 39
  *
38 40
  */
39 41
 
@@ -613,7 +615,7 @@ a3c90x_transmit(struct nic *nic __unused, const char *d, unsigned int t,
613 615
 static int
614 616
 a3c90x_poll(struct nic *nic, int retrieve)
615 617
     {
616
-    int i, errcode;
618
+    int errcode;
617 619
 
618 620
     if (!(inw(INF_3C90X.IOAddr + regCommandIntStatus_w)&0x0010))
619 621
 	{
@@ -637,9 +639,9 @@ a3c90x_poll(struct nic *nic, int retrieve)
637 639
          INF_3C90X.IOAddr + regUpListPtr_l);
638 640
 
639 641
     /** Wait for upload completion (upComplete(15) or upError (14)) **/
640
-    for(i=0;i<40000;i++);
642
+    mdelay(1);
641 643
     while((INF_3C90X.ReceiveUPD.UpPktStatus & ((1<<14) | (1<<15))) == 0)
642
-	for(i=0;i<40000;i++);
644
+    	mdelay(1);
643 645
 
644 646
     /** Check for Error (else we have good packet) **/
645 647
     if (INF_3C90X.ReceiveUPD.UpPktStatus & (1<<14))
@@ -779,7 +781,7 @@ static int a3c90x_probe ( struct nic *nic, struct pci_device *pci ) {
779 781
 	}
780 782
 
781 783
     /** Print identification message **/
782
-    printf("\n\n3C90X Driver 2.00 "
784
+    printf("\n\n3C90X Driver 2.02 "
783 785
            "Copyright 1999 LightSys Technology Services, Inc.\n"
784 786
            "Portions Copyright 1999 Steve Smith\n");
785 787
     printf("Provided with ABSOLUTELY NO WARRANTY.\n");

読み込み中…
キャンセル
保存