summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsave2009-09-09 15:55:40 +0000
committersave2009-09-09 15:55:40 +0000
commitaa4a270c0ae90c19db2a959e011817c4a949efbe (patch)
tree6c5b3381ff7732f35635f5219d4a42fbc8b2d261
parent6eeedcde6b3e456a7e963a5c146556da8fb322b8 (diff)
[CLEO][KERNEL]Setting some Ethtools for ethernet drivers
Functions are : - set/get setting - get driver_informations - get link git-svn-id: svn+ssh://pessac/svn/cesar/trunk@5481 017c9cb6-072f-447c-8318-d5b54f68fe89
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
index ff9693fa96..5c493480df 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
@@ -158,6 +158,84 @@ static void print_packet(const char * prefix, int descr, int len, struct sk_buff
static char version[] __devinitdata = DRV_NAME " 10/100/1000 Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
/**
+ * Ethtool Set Settings.
+ * \param dev device structure.
+ * \param cmd ethtool command structure.
+ * \return ethtool command.
+ */
+static int synop3504_ssettings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ struct net_priv *priv = NULL;
+
+ //Check pointers
+ if(dev == NULL)
+ return -1;
+ priv = (struct net_priv *)dev->priv;
+ if(priv == NULL)
+ return -1;
+
+ return mii_ethtool_sset(&priv->mii_if, cmd);
+}
+
+/**
+ * Ethtool Get Settings.
+ * \param dev device structure.
+ * \param cmd ethtool command structure.
+ * \return ethtool command.
+ */
+static int synop3504_gsettings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ struct net_priv *priv = NULL;
+
+ //Check pointers
+ if(dev == NULL)
+ return -1;
+ priv = (struct net_priv *)dev->priv;
+ if(priv == NULL)
+ return -1;
+
+ return mii_ethtool_gset(&priv->mii_if, cmd);
+}
+
+/**
+ * Ethtool Get driver informations.
+ * \param dev device structure.
+ * \param drvinfo ethtool driver info structure.
+ */
+static void synop3504_gdrvinfo(struct net_device *dev, struct ethtool_drvinfo *drvinfo)
+{
+ strcpy(drvinfo->driver, DRV_NAME);
+ strcpy(drvinfo->version, DRV_VERSION);
+ strcpy(drvinfo->fw_version, "N/A");
+ strcpy(drvinfo->bus_info, "N/A");
+ drvinfo->regdump_len = 0;
+ drvinfo->eedump_len = 0;
+}
+
+/** Ethtool functions */
+const struct ethtool_ops synop3504_ethtool_ops = {
+ .get_settings = synop3504_gsettings,
+ .set_settings = synop3504_ssettings,
+ .get_drvinfo = synop3504_gdrvinfo,
+ .get_link = ethtool_op_get_link,
+/* .get_regs_len = synop3504_reglen,
+ .get_regs = synop3504_get_regs,
+ .get_coalesce = synop3504_gcoalesce,
+ .set_coalesce = synop3504_scoalesce,
+ .get_ringparam = synop3504_gringparam,
+ .set_ringparam = synop3504_sringparam,
+ .get_strings = synop3504_gstrings,
+ .get_sset_count = synop3504_sset_count,
+ .get_ethtool_stats = synop3504_fill_stats,
+ .get_rx_csum = synop3504_get_rx_csum,
+ .get_tx_csum = synop3504_get_tx_csum,
+ .set_rx_csum = synop3504_set_rx_csum,
+ .set_tx_csum = synop3504_set_tx_csum,
+ .get_msglevel = synop3504_get_msglevel,
+ .set_msglevel = synop3504_set_msglevel,*/
+};
+
+/**
* Read a MII register.
* \param dev device structure.
* \param phy phy addr (not used for us).
@@ -1352,6 +1430,7 @@ static int synop3504_init(struct net_device *dev)
dev->open = synop3504_open;
dev->stop = synop3504_stop;
dev->do_ioctl = synop3504_ioctl;
+ dev->ethtool_ops = &synop3504_ethtool_ops;
dev->set_mac_address = synop3504_set_mac_address;
dev->hard_start_xmit = synop3504_tx;
dev->get_stats = synop3504_stats;