Re: [PATCH 6/7] qla3xxx: Adding support for the Agere PHY (ET1011C)

2007-03-29 Thread Jeff Garzik

Ron Mercer wrote:

This PHY support patch was written by Benjamin Li.
Signed-off-by: Benjamin Li [EMAIL PROTECTED]
Signed-off-by: Ron Mercer [EMAIL PROTECTED]
---
 drivers/net/qla3xxx.c |  347 +++--
 drivers/net/qla3xxx.h |   33 +-
 2 files changed, 335 insertions(+), 45 deletions(-)


applied 5-7 to #upstream


-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 6/7] qla3xxx: Adding support for the Agere PHY (ET1011C)

2007-03-26 Thread Ron Mercer
This PHY support patch was written by Benjamin Li.
Signed-off-by: Benjamin Li [EMAIL PROTECTED]
Signed-off-by: Ron Mercer [EMAIL PROTECTED]
---
 drivers/net/qla3xxx.c |  347 +++--
 drivers/net/qla3xxx.h |   33 +-
 2 files changed, 335 insertions(+), 45 deletions(-)

diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index 631bf9f..3a49fc9 100755
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -72,6 +72,30 @@ static struct pci_device_id ql3xxx_pci_tbl[] __devinitdata = 
{
 MODULE_DEVICE_TABLE(pci, ql3xxx_pci_tbl);
 
 /*
+ *  These are the known PHY's which are used
+ */
+typedef enum {
+   PHY_TYPE_UNKNOWN   = 0,
+   PHY_VITESSE_VSC8211,
+   PHY_AGERE_ET1011C,
+   MAX_PHY_DEV_TYPES
+} PHY_DEVICE_et;
+
+typedef struct {
+   PHY_DEVICE_et phyDevice; 
+   u32 phyIdOUI;
+   u16 phyIdModel;
+   char*name;
+} PHY_DEVICE_INFO_t;
+
+const PHY_DEVICE_INFO_t PHY_DEVICES[] =
+   {{PHY_TYPE_UNKNOWN,0x00, 0x0, PHY_TYPE_UNKNOWN},
+{PHY_VITESSE_VSC8211, 0x0003f1, 0xb, PHY_VITESSE_VSC8211},
+{PHY_AGERE_ET1011C,   0x00a0bc, 0x1, PHY_AGERE_ET1011C},
+};
+
+
+/*
  * Caller must take hw_lock.
  */
 static int ql_sem_spinlock(struct ql3_adapter *qdev,
@@ -662,7 +686,7 @@ static u8 ql_mii_disable_scan_mode(struct ql3_adapter *qdev)
 }
 
 static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
-  u16 regAddr, u16 value, u32 mac_index)
+  u16 regAddr, u16 value, u32 phyAddr)
 {
struct ql3xxx_port_registers __iomem *port_regs =
qdev-mem_map_registers;
@@ -680,7 +704,7 @@ static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
}
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtAddrReg,
-  PHYAddr[mac_index] | regAddr);
+  phyAddr | regAddr);
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtDataReg, value);
 
@@ -701,7 +725,7 @@ static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
 }
 
 static int ql_mii_read_reg_ex(struct ql3_adapter *qdev, u16 regAddr,
- u16 * value, u32 mac_index)
+ u16 * value, u32 phyAddr)
 {
struct ql3xxx_port_registers __iomem *port_regs =
qdev-mem_map_registers;
@@ -720,7 +744,7 @@ static int ql_mii_read_reg_ex(struct ql3_adapter *qdev, u16 
regAddr,
}
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtAddrReg,
-  PHYAddr[mac_index] | regAddr);
+  phyAddr | regAddr);
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtControlReg,
   (MAC_MII_CONTROL_RC  16));
@@ -850,28 +874,31 @@ static void ql_petbi_start_neg(struct ql3_adapter *qdev)
 
 }
 
-static void ql_petbi_reset_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_reset_ex(struct ql3_adapter *qdev)
 {
ql_mii_write_reg_ex(qdev, PETBI_CONTROL_REG, PETBI_CTRL_SOFT_RESET,
-   mac_index);
+   PHYAddr[qdev-mac_index]);
 }
 
-static void ql_petbi_start_neg_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_start_neg_ex(struct ql3_adapter *qdev)
 {
u16 reg;
 
/* Enable Auto-negotiation sense */
-   ql_mii_read_reg_ex(qdev, PETBI_TBI_CTRL, reg, mac_index);
+   ql_mii_read_reg_ex(qdev, PETBI_TBI_CTRL, reg, 
+  PHYAddr[qdev-mac_index]);
reg |= PETBI_TBI_AUTO_SENSE;
-   ql_mii_write_reg_ex(qdev, PETBI_TBI_CTRL, reg, mac_index);
+   ql_mii_write_reg_ex(qdev, PETBI_TBI_CTRL, reg, 
+   PHYAddr[qdev-mac_index]);
 
ql_mii_write_reg_ex(qdev, PETBI_NEG_ADVER,
-   PETBI_NEG_PAUSE | PETBI_NEG_DUPLEX, mac_index);
+   PETBI_NEG_PAUSE | PETBI_NEG_DUPLEX, 
+   PHYAddr[qdev-mac_index]);
 
ql_mii_write_reg_ex(qdev, PETBI_CONTROL_REG,
PETBI_CTRL_AUTO_NEG | PETBI_CTRL_RESTART_NEG |
PETBI_CTRL_FULL_DUPLEX | PETBI_CTRL_SPEED_1000,
-   mac_index);
+   PHYAddr[qdev-mac_index]);
 }
 
 static void ql_petbi_init(struct ql3_adapter *qdev)
@@ -880,10 +907,10 @@ static void ql_petbi_init(struct ql3_adapter *qdev)
ql_petbi_start_neg(qdev);
 }
 
-static void ql_petbi_init_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_init_ex(struct ql3_adapter *qdev)
 {
-   ql_petbi_reset_ex(qdev, mac_index);
-   ql_petbi_start_neg_ex(qdev, mac_index);
+   ql_petbi_reset_ex(qdev);
+   ql_petbi_start_neg_ex(qdev);
 }
 
 static int ql_is_petbi_neg_pause(struct ql3_adapter *qdev)
@@ -896,33 +923,128 @@ static int ql_is_petbi_neg_pause(struct ql3_adapter 
*qdev)
return (reg  PETBI_NEG_PAUSE_MASK) == PETBI_NEG_PAUSE;
 }
 

[PATCH 6/7] qla3xxx: Adding support for the Agere PHY (ET1011C)

2007-03-26 Thread Ron Mercer
This PHY support patch was written by Benjamin Li.
Signed-off-by: Benjamin Li [EMAIL PROTECTED]
Signed-off-by: Ron Mercer [EMAIL PROTECTED]
---
 drivers/net/qla3xxx.c |  347 +++--
 drivers/net/qla3xxx.h |   33 +-
 2 files changed, 335 insertions(+), 45 deletions(-)

diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index 631bf9f..3a49fc9 100755
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -72,6 +72,30 @@ static struct pci_device_id ql3xxx_pci_tbl[] __devinitdata = 
{
 MODULE_DEVICE_TABLE(pci, ql3xxx_pci_tbl);
 
 /*
+ *  These are the known PHY's which are used
+ */
+typedef enum {
+   PHY_TYPE_UNKNOWN   = 0,
+   PHY_VITESSE_VSC8211,
+   PHY_AGERE_ET1011C,
+   MAX_PHY_DEV_TYPES
+} PHY_DEVICE_et;
+
+typedef struct {
+   PHY_DEVICE_et phyDevice; 
+   u32 phyIdOUI;
+   u16 phyIdModel;
+   char*name;
+} PHY_DEVICE_INFO_t;
+
+const PHY_DEVICE_INFO_t PHY_DEVICES[] =
+   {{PHY_TYPE_UNKNOWN,0x00, 0x0, PHY_TYPE_UNKNOWN},
+{PHY_VITESSE_VSC8211, 0x0003f1, 0xb, PHY_VITESSE_VSC8211},
+{PHY_AGERE_ET1011C,   0x00a0bc, 0x1, PHY_AGERE_ET1011C},
+};
+
+
+/*
  * Caller must take hw_lock.
  */
 static int ql_sem_spinlock(struct ql3_adapter *qdev,
@@ -662,7 +686,7 @@ static u8 ql_mii_disable_scan_mode(struct ql3_adapter *qdev)
 }
 
 static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
-  u16 regAddr, u16 value, u32 mac_index)
+  u16 regAddr, u16 value, u32 phyAddr)
 {
struct ql3xxx_port_registers __iomem *port_regs =
qdev-mem_map_registers;
@@ -680,7 +704,7 @@ static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
}
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtAddrReg,
-  PHYAddr[mac_index] | regAddr);
+  phyAddr | regAddr);
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtDataReg, value);
 
@@ -701,7 +725,7 @@ static int ql_mii_write_reg_ex(struct ql3_adapter *qdev,
 }
 
 static int ql_mii_read_reg_ex(struct ql3_adapter *qdev, u16 regAddr,
- u16 * value, u32 mac_index)
+ u16 * value, u32 phyAddr)
 {
struct ql3xxx_port_registers __iomem *port_regs =
qdev-mem_map_registers;
@@ -720,7 +744,7 @@ static int ql_mii_read_reg_ex(struct ql3_adapter *qdev, u16 
regAddr,
}
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtAddrReg,
-  PHYAddr[mac_index] | regAddr);
+  phyAddr | regAddr);
 
ql_write_page0_reg(qdev, port_regs-macMIIMgmtControlReg,
   (MAC_MII_CONTROL_RC  16));
@@ -850,28 +874,31 @@ static void ql_petbi_start_neg(struct ql3_adapter *qdev)
 
 }
 
-static void ql_petbi_reset_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_reset_ex(struct ql3_adapter *qdev)
 {
ql_mii_write_reg_ex(qdev, PETBI_CONTROL_REG, PETBI_CTRL_SOFT_RESET,
-   mac_index);
+   PHYAddr[qdev-mac_index]);
 }
 
-static void ql_petbi_start_neg_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_start_neg_ex(struct ql3_adapter *qdev)
 {
u16 reg;
 
/* Enable Auto-negotiation sense */
-   ql_mii_read_reg_ex(qdev, PETBI_TBI_CTRL, reg, mac_index);
+   ql_mii_read_reg_ex(qdev, PETBI_TBI_CTRL, reg, 
+  PHYAddr[qdev-mac_index]);
reg |= PETBI_TBI_AUTO_SENSE;
-   ql_mii_write_reg_ex(qdev, PETBI_TBI_CTRL, reg, mac_index);
+   ql_mii_write_reg_ex(qdev, PETBI_TBI_CTRL, reg, 
+   PHYAddr[qdev-mac_index]);
 
ql_mii_write_reg_ex(qdev, PETBI_NEG_ADVER,
-   PETBI_NEG_PAUSE | PETBI_NEG_DUPLEX, mac_index);
+   PETBI_NEG_PAUSE | PETBI_NEG_DUPLEX, 
+   PHYAddr[qdev-mac_index]);
 
ql_mii_write_reg_ex(qdev, PETBI_CONTROL_REG,
PETBI_CTRL_AUTO_NEG | PETBI_CTRL_RESTART_NEG |
PETBI_CTRL_FULL_DUPLEX | PETBI_CTRL_SPEED_1000,
-   mac_index);
+   PHYAddr[qdev-mac_index]);
 }
 
 static void ql_petbi_init(struct ql3_adapter *qdev)
@@ -880,10 +907,10 @@ static void ql_petbi_init(struct ql3_adapter *qdev)
ql_petbi_start_neg(qdev);
 }
 
-static void ql_petbi_init_ex(struct ql3_adapter *qdev, u32 mac_index)
+static void ql_petbi_init_ex(struct ql3_adapter *qdev)
 {
-   ql_petbi_reset_ex(qdev, mac_index);
-   ql_petbi_start_neg_ex(qdev, mac_index);
+   ql_petbi_reset_ex(qdev);
+   ql_petbi_start_neg_ex(qdev);
 }
 
 static int ql_is_petbi_neg_pause(struct ql3_adapter *qdev)
@@ -896,33 +923,128 @@ static int ql_is_petbi_neg_pause(struct ql3_adapter 
*qdev)
return (reg  PETBI_NEG_PAUSE_MASK) == PETBI_NEG_PAUSE;
 }