[PATCH 119/222] net:fec: move bufdesc_ex flag into flags

Russell King rmk+kernel at arm.linux.org.uk
Fri Apr 25 04:41:35 PDT 2014


Add a new flags field to contain the mostly static driver configuration,
the first of which is the bufdesc_ex flag.

Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
---
 drivers/net/ethernet/freescale/fec.h      |  3 +-
 drivers/net/ethernet/freescale/fec_main.c | 48 +++++++++++++++++--------------
 2 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 11717d2fd520..a5d38e4c770c 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -301,6 +301,8 @@ struct fec_enet_private {
 	unsigned short tx_ring_size;
 	unsigned short rx_ring_size;
 
+	unsigned char flags;
+
 	struct mutex mutex;
 
 	struct	platform_device *pdev;
@@ -318,7 +320,6 @@ struct fec_enet_private {
 	int	speed;
 	struct	completion mdio_done;
 	int	irq[FEC_IRQ_NUM];
-	int	bufdesc_ex;
 	unsigned short pause_flag;
 	unsigned short pause_mode;
 
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index afbcd7f14951..c35a1e00129c 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -225,10 +225,14 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
 /* Transmitter timeout */
 #define TX_TIMEOUT (2 * HZ)
 
+/* pause mode/flag */
 #define FEC_PAUSE_FLAG_AUTONEG	BIT(0)
 #define FEC_PAUSE_FLAG_RX	BIT(1)
 #define FEC_PAUSE_FLAG_TX	BIT(2)
 
+/* flags */
+#define FEC_FLAG_BUFDESC_EX	BIT(0)
+
 static int mii_cnt;
 
 static union bufdesc_u *
@@ -237,7 +241,7 @@ fec_enet_tx_get(unsigned index, struct fec_enet_private *fep)
 	union bufdesc_u *base = fep->tx_bd_base;
 	union bufdesc_u *bdp;
 
-	if (fep->bufdesc_ex)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX)
 		bdp = (union bufdesc_u *)(&base->ebd + index);
 	else
 		bdp = (union bufdesc_u *)(&base->bd + index);
@@ -253,7 +257,7 @@ fec_enet_rx_get(unsigned index, struct fec_enet_private *fep)
 
 	index &= fep->rx_ring_size - 1;
 
-	if (fep->bufdesc_ex)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX)
 		bdp = (union bufdesc_u *)(&base->ebd + index);
 	else
 		bdp = (union bufdesc_u *)(&base->bd + index);
@@ -417,7 +421,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	fep->tx_page_map[index] = 0;
 
 	cbd_esc = BD_ENET_TX_INT;
-	if (fep->bufdesc_ex) {
+	if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP &&
 			fep->hwts_tx_en)) {
 			cbd_esc |= BD_ENET_TX_TS;
@@ -464,7 +468,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 		bdp = fec_enet_tx_get(last, fep);
 		bdp->bd.cbd_datlen = length;
 		bdp->bd.cbd_bufaddr = addr;
-		if (fep->bufdesc_ex) {
+		if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 			bdp->ebd.cbd_esc = cbd_esc;
 			bdp->ebd.cbd_bdu = 0;
 		}
@@ -726,7 +730,7 @@ fec_restart(struct net_device *ndev)
 		writel(1 << 8, fep->hwp + FEC_X_WMRK);
 	}
 
-	if (fep->bufdesc_ex)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX)
 		ecntl |= (1 << 4);
 
 #ifndef CONFIG_M5272
@@ -738,7 +742,7 @@ fec_restart(struct net_device *ndev)
 	writel(ecntl, fep->hwp + FEC_ECNTRL);
 	writel(0, fep->hwp + FEC_R_DES_ACTIVE);
 
-	if (fep->bufdesc_ex)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX)
 		fec_ptp_start_cyclecounter(ndev);
 
 	/* Enable interrupts we wish to service */
@@ -879,7 +883,7 @@ fec_enet_tx(struct net_device *ndev)
 			ndev->stats.collisions++;
 
 		if (skb) {
-			if (fep->bufdesc_ex &&
+			if (fep->flags & FEC_FLAG_BUFDESC_EX &&
 			    unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
 				struct skb_shared_hwtstamps shhwtstamps;
 
@@ -998,7 +1002,7 @@ fec_enet_rx(struct net_device *ndev, int budget)
 		/* If this is a VLAN packet remove the VLAN Tag */
 		vlan_packet_rcvd = false;
 		if ((ndev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
-		    fep->bufdesc_ex && (bdp->ebd.cbd_esc & BD_ENET_RX_VLAN)) {
+		    fep->flags & FEC_FLAG_BUFDESC_EX && (bdp->ebd.cbd_esc & BD_ENET_RX_VLAN)) {
 			/* Push and remove the vlan tag */
 			struct vlan_hdr *vlan_header =
 					(struct vlan_hdr *) (data + ETH_HLEN);
@@ -1033,11 +1037,11 @@ fec_enet_rx(struct net_device *ndev, int budget)
 			skb->protocol = eth_type_trans(skb, ndev);
 
 			/* Get receive timestamp from the skb */
-			if (fep->hwts_rx_en && fep->bufdesc_ex)
+			if (fep->hwts_rx_en && fep->flags & FEC_FLAG_BUFDESC_EX)
 				fec_enet_hwtstamp(fep, bdp->ebd.ts,
 						  skb_hwtstamps(skb));
 
-			if (fep->bufdesc_ex &&
+			if (fep->flags & FEC_FLAG_BUFDESC_EX &&
 			    (fep->csum_flags & FLAG_RX_CSUM_ENABLED)) {
 				if (!(bdp->ebd.cbd_esc & FLAG_RX_CSUM_ERROR)) {
 					/* don't check it */
@@ -1059,7 +1063,7 @@ fec_enet_rx(struct net_device *ndev, int budget)
 		dma_sync_single_for_device(&fep->pdev->dev, bdp->bd.cbd_bufaddr,
 					FEC_ENET_RX_FRSIZE, DMA_FROM_DEVICE);
 rx_processing_done:
-		if (fep->bufdesc_ex) {
+		if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 			bdp->ebd.cbd_esc = BD_ENET_RX_INT;
 			bdp->ebd.cbd_prot = 0;
 			bdp->ebd.cbd_bdu = 0;
@@ -1602,7 +1606,7 @@ static int fec_enet_get_ts_info(struct net_device *ndev,
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
 
-	if (fep->bufdesc_ex) {
+	if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 
 		info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
 					SOF_TIMESTAMPING_RX_SOFTWARE |
@@ -1851,7 +1855,7 @@ static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
 	if (!phydev)
 		return -ENODEV;
 
-	if (fep->bufdesc_ex) {
+	if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 		if (cmd == SIOCSHWTSTAMP)
 			return fec_ptp_set(ndev, rq);
 		if (cmd == SIOCGHWTSTAMP)
@@ -1914,7 +1918,7 @@ static int fec_enet_alloc_buffers(struct net_device *ndev)
 	/* Set receive and transmit descriptor base. */
 	fep->rx_bd_base = cbd_base;
 	fep->rx_bd_dma = cbd_dma;
-	if (fep->bufdesc_ex) {
+	if (fep->flags & FEC_FLAG_BUFDESC_EX) {
 		fep->tx_bd_base = (union bufdesc_u *)
 			(&cbd_base->ebd + fep->rx_ring_size);
 		fep->tx_bd_dma = cbd_dma + sizeof(struct bufdesc_ex) *
@@ -1950,7 +1954,7 @@ static int fec_enet_alloc_buffers(struct net_device *ndev)
 		if (i == fep->rx_ring_size - 1)
 			bdp->bd.cbd_sc |= BD_SC_WRAP;
 
-		if (fep->bufdesc_ex)
+		if (fep->flags & FEC_FLAG_BUFDESC_EX)
 			bdp->ebd.cbd_esc = BD_ENET_RX_INT;
 	}
 
@@ -1967,7 +1971,7 @@ static int fec_enet_alloc_buffers(struct net_device *ndev)
 			bdp->bd.cbd_sc = 0;
 		bdp->bd.cbd_bufaddr = 0;
 
-		if (fep->bufdesc_ex)
+		if (fep->flags & FEC_FLAG_BUFDESC_EX)
 			bdp->ebd.cbd_esc = BD_ENET_TX_INT;
 	}
 
@@ -2367,7 +2371,9 @@ fec_probe(struct platform_device *pdev)
 	fep->pdev = pdev;
 	fep->dev_id = dev_id++;
 
-	fep->bufdesc_ex = 0;
+	fep->flags = 0;
+	if (pdev->id_entry->driver_data & FEC_QUIRK_HAS_BUFDESC_EX)
+		fep->flags |= FEC_FLAG_BUFDESC_EX;
 
 	platform_set_drvdata(pdev, ndev);
 
@@ -2400,11 +2406,9 @@ fec_probe(struct platform_device *pdev)
 		fep->clk_enet_out = NULL;
 
 	fep->clk_ptp = devm_clk_get(&pdev->dev, "ptp");
-	fep->bufdesc_ex =
-		pdev->id_entry->driver_data & FEC_QUIRK_HAS_BUFDESC_EX;
 	if (IS_ERR(fep->clk_ptp)) {
 		fep->clk_ptp = NULL;
-		fep->bufdesc_ex = 0;
+		fep->flags &= ~FEC_FLAG_BUFDESC_EX;
 	}
 
 	ret = clk_prepare_enable(fep->clk_ahb);
@@ -2441,7 +2445,7 @@ fec_probe(struct platform_device *pdev)
 
 	fec_reset_phy(pdev);
 
-	if (fep->bufdesc_ex)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX)
 		fec_ptp_init(pdev);
 
 	fec_enet_init(ndev);
@@ -2471,7 +2475,7 @@ fec_probe(struct platform_device *pdev)
 	if (ret)
 		goto failed_register;
 
-	if (fep->bufdesc_ex && fep->ptp_clock)
+	if (fep->flags & FEC_FLAG_BUFDESC_EX && fep->ptp_clock)
 		netdev_info(ndev, "registered PHC device %d\n", fep->dev_id);
 
 	INIT_WORK(&fep->tx_timeout_work, fec_enet_timeout_work);
-- 
1.8.3.1




More information about the linux-arm-kernel mailing list