|
@@ -940,6 +940,56 @@ static struct phy_info phy_info_lxt971 = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+/* Parse the DP83865's link and auto-neg status register for speed and duplex
|
|
|
+ * information */
|
|
|
+uint mii_parse_dp83865_lanr(uint mii_reg, struct tsec_private *priv)
|
|
|
+{
|
|
|
+ switch (mii_reg & MIIM_DP83865_SPD_MASK) {
|
|
|
+
|
|
|
+ case MIIM_DP83865_SPD_1000:
|
|
|
+ priv->speed = 1000;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case MIIM_DP83865_SPD_100:
|
|
|
+ priv->speed = 100;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ priv->speed = 10;
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mii_reg & MIIM_DP83865_DPX_FULL)
|
|
|
+ priv->duplexity = 1;
|
|
|
+ else
|
|
|
+ priv->duplexity = 0;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+struct phy_info phy_info_dp83865 = {
|
|
|
+ 0x20005c7,
|
|
|
+ "NatSemi DP83865",
|
|
|
+ 4,
|
|
|
+ (struct phy_cmd[]) { /* config */
|
|
|
+ {MIIM_CONTROL, MIIM_DP83865_CR_INIT, NULL},
|
|
|
+ {miim_end,}
|
|
|
+ },
|
|
|
+ (struct phy_cmd[]) { /* startup */
|
|
|
+ /* Status is read once to clear old link state */
|
|
|
+ {MIIM_STATUS, miim_read, NULL},
|
|
|
+ /* Auto-negotiate */
|
|
|
+ {MIIM_STATUS, miim_read, &mii_parse_sr},
|
|
|
+ /* Read the link and auto-neg status */
|
|
|
+ {MIIM_DP83865_LANR, miim_read, &mii_parse_dp83865_lanr},
|
|
|
+ {miim_end,}
|
|
|
+ },
|
|
|
+ (struct phy_cmd[]) { /* shutdown */
|
|
|
+ {miim_end,}
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
struct phy_info *phy_info[] = {
|
|
|
#if 0
|
|
|
&phy_info_cis8201,
|
|
@@ -949,6 +999,7 @@ struct phy_info *phy_info[] = {
|
|
|
&phy_info_M88E1111S,
|
|
|
&phy_info_dm9161,
|
|
|
&phy_info_lxt971,
|
|
|
+ &phy_info_dp83865,
|
|
|
NULL
|
|
|
};
|
|
|
|