#define PARM_SPEED_DUPLEX_MIN 0
#define PARM_SPEED_DUPLEX_MAX 5
-#define PARM_VLAN_TAG_DEF 0
-#define PARM_VLAN_TAG_MIN 0
-#define PARM_VLAN_TAG_MAX 4095
-
#define PARM_FLOW_CTL_DEF 0
#define PARM_FLOW_CTL_MIN 0
#define PARM_FLOW_CTL_MAX 3
-#define PARM_WOL_LINK_DEF 3
-#define PARM_WOL_LINK_MIN 0
-#define PARM_WOL_LINK_MAX 3
-
-#define PARM_WOL_MATCH_DEF 7
-#define PARM_WOL_MATCH_MIN 0
-#define PARM_WOL_MATCH_MAX 7
-
#define PARM_JUMBO_PKT_DEF 1514
#define PARM_JUMBO_PKT_MIN 1514
#define PARM_JUMBO_PKT_MAX 9216
#define PARM_PHY_COMA_MIN 0
#define PARM_PHY_COMA_MAX 1
-#define PARM_MAC_STAT_DEF 1
-#define PARM_MAC_STAT_MIN 0
-#define PARM_MAC_STAT_MAX 1
-
#define PARM_SC_GAIN_DEF 7
#define PARM_SC_GAIN_MIN 0
#define PARM_SC_GAIN_MAX 7
#define PARM_NMI_DISABLE_MIN 0
#define PARM_NMI_DISABLE_MAX 2
-#define PARM_DMA_CACHE_DEF 0
-
-#define PARM_PHY_LOOPBK_DEF 0
-#define PARM_PHY_LOOPBK_MIN 0
-#define PARM_PHY_LOOPBK_MAX 1
-#define PARM_MAC_ADDRESS_DEF { 0x00, 0x05, 0x3d, 0x00, 0x02, 0x00 }
/* Module parameter for disabling NMI
* et131x_speed_set :
* @etdev: pointer to the private adapter struct
*
* Parses a configuration from some location (module parameters, for example)
- * into the private adapter struct
+ * into the private adapter struct. This really has no sensible analogy in
+ * Linux as sysfs parameters are dynamic. Several things that were hee could
+ * go into sysfs, but other stuff like speed handling is part of the mii
+ * interfaces/ethtool.
*/
void et131x_config_parse(struct et131x_adapter *etdev)
{
- uint8_t macAddrDef[] = PARM_MAC_ADDRESS_DEF;
+ static const u8 default_mac[] = { 0x00, 0x05, 0x3d, 0x00, 0x02, 0x00 };
+ static const u8 duplex[] = { 0, 1, 2, 1, 2, 2 };
+ static const u16 speed[] = { 0, 10, 10, 100, 100, 1000 };
DBG_ENTER(et131x_dbginfo);
- /*
- * The NDIS driver uses the registry to store persistent per-device
- * configuration, and reads this configuration into the appropriate
- * elements of the private adapter structure on initialization.
- * Because Linux has no analog to the registry, use this function to
- * initialize the private adapter structure with a default
- * configuration.
- *
- * One other possibility is to use a series of module parameters which
- * can be passed in by the caller when the module is initialized.
- * However, this implementation does not allow for seperate
- * configurations in the event multiple devices are present, and hence
- * will not suffice.
- *
- * If another method is derived which addresses this problem, this is
- * where it should be implemented.
- */
+ etdev->SpeedDuplex = et131x_speed_set;
- /* Set the private adapter struct with default values for the
- * corresponding parameters
- */
- if (et131x_speed_set != PARM_SPEED_DUPLEX_DEF) {
+ if (et131x_speed_set < PARM_SPEED_DUPLEX_MIN ||
+ et131x_speed_set > PARM_SPEED_DUPLEX_MAX) {
+ dev_warn(&etdev->pdev->dev, "invalid speed setting ignored.\n");
+ et131x_speed_set = PARM_SPEED_DUPLEX_DEF;
+ }
+ else if (et131x_speed_set != PARM_SPEED_DUPLEX_DEF)
DBG_VERBOSE(et131x_dbginfo, "Speed set manually to : %d \n",
et131x_speed_set);
- etdev->SpeedDuplex = et131x_speed_set;
- } else {
- etdev->SpeedDuplex = PARM_SPEED_DUPLEX_DEF;
- }
/* etdev->SpeedDuplex = PARM_SPEED_DUPLEX_DEF; */
- etdev->RegistryVlanTag = PARM_VLAN_TAG_DEF;
etdev->RegistryFlowControl = PARM_FLOW_CTL_DEF;
etdev->RegistryJumboPacket = PARM_JUMBO_PKT_DEF;
etdev->RegistryPhyComa = PARM_PHY_COMA_DEF;
- etdev->RegistryMACStat = PARM_MAC_STAT_DEF;
if (et131x_nmi_disable != PARM_NMI_DISABLE_DEF)
etdev->RegistryNMIDisable = et131x_nmi_disable;
else
etdev->RegistryNMIDisable = PARM_NMI_DISABLE_DEF;
- etdev->RegistryPhyLoopbk = PARM_PHY_LOOPBK_DEF;
+ etdev->RegistryPhyLoopbk = 0; /* 0 off 1 on */
/* Set the MAC address to a default */
- memcpy(etdev->CurrentAddress, macAddrDef, ETH_ALEN);
+ memcpy(etdev->CurrentAddress, default_mac, ETH_ALEN);
etdev->bOverrideAddress = false;
- DBG_TRACE(et131x_dbginfo,
- "Default MAC Address : %02x:%02x:%02x:%02x:%02x:%02x\n",
- etdev->CurrentAddress[0], etdev->CurrentAddress[1],
- etdev->CurrentAddress[2], etdev->CurrentAddress[3],
- etdev->CurrentAddress[4], etdev->CurrentAddress[5]);
-
/* Decode SpeedDuplex
*
* Set up as if we are auto negotiating always and then change if we
* go into force mode
- */
- etdev->AiForceSpeed = 0; /* Auto speed */
- etdev->AiForceDpx = 0; /* Auto FDX */
-
- /* If we are the 10/100 device, and gigabit is somehow requested then
+ *
+ * If we are the 10/100 device, and gigabit is somehow requested then
* knock it down to 100 full.
*/
if (etdev->pdev->device == ET131X_PCI_DEVICE_ID_FAST &&
etdev->SpeedDuplex == 5)
etdev->SpeedDuplex = 4;
- switch (etdev->SpeedDuplex) {
- case 1: /* 10Mb Half-Duplex */
- etdev->AiForceSpeed = 10;
- etdev->AiForceDpx = 1;
- break;
-
- case 2: /* 10Mb Full-Duplex */
- etdev->AiForceSpeed = 10;
- etdev->AiForceDpx = 2;
- break;
-
- case 3: /* 100Mb Half-Duplex */
- etdev->AiForceSpeed = 100;
- etdev->AiForceDpx = 1;
- break;
-
- case 4: /* 100Mb Full-Duplex */
- etdev->AiForceSpeed = 100;
- etdev->AiForceDpx = 2;
- break;
-
- case 5: /* 1000Mb Full-Duplex */
- etdev->AiForceSpeed = 1000;
- etdev->AiForceDpx = 2;
- break;
- }
+ etdev->AiForceSpeed = speed[etdev->SpeedDuplex];
+ etdev->AiForceDpx = duplex[etdev->SpeedDuplex]; /* Auto FDX */
DBG_LEAVE(et131x_dbginfo);
}