bk://gkernel.bkbits.net/net-drivers-2.6
scott.feldman@intel.com|ChangeSet|20040519004013|46799 scott.feldman

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/05/18 20:40:13-04:00 scott.feldman@intel.com 
#   [PATCH] e100: netdev->priv to netdev_priv()
#   
#   * Convert all netdev->priv references to the fancy new netdev_priv().
# 
# drivers/net/e100.c
#   2004/05/18 19:34:19-04:00 scott.feldman@intel.com +39 -39
#   netdev->priv to netdev_priv()
# 
# ChangeSet
#   2004/05/18 20:40:05-04:00 scott.feldman@intel.com 
#   [PATCH] e100: big-endian fix for ethtool -e/E
#   
#   * Reads/writes from/to eeprom using ethtool weren't working right
#     on big-endian.  Now they are.
# 
# drivers/net/e100.c
#   2004/05/18 19:31:36-04:00 scott.feldman@intel.com +12 -11
#   big-endian fix for ethtool -e/E
# 
# ChangeSet
#   2004/05/18 20:39:57-04:00 scott.feldman@intel.com 
#   [PATCH] e100: fix for incoherent arches
#   
#   * Changed mapping on Rx skb to bi-directional.  skb->data holds both the
#     RFD structure and the packet data, and the RFD is read/written by
#     HW.  Issue found on Xscale HW that doesn't handle cache syncs auto-
#     matically.  Other changes in patch are whitespace/spelling.
# 
# drivers/net/e100.c
#   2004/05/18 19:27:29-04:00 scott.feldman@intel.com +5 -5
#   fix for non-ocherent arches
# 
diff -Nru a/drivers/net/e100.c b/drivers/net/e100.c
--- a/drivers/net/e100.c	Tue May 18 23:56:39 2004
+++ b/drivers/net/e100.c	Tue May 18 23:56:39 2004
@@ -158,7 +158,7 @@
 
 
 #define DRV_NAME		"e100"
-#define DRV_VERSION		"3.0.17"
+#define DRV_VERSION		"3.0.18"
 #define DRV_DESCRIPTION		"Intel(R) PRO/100 Network Driver"
 #define DRV_COPYRIGHT		"Copyright(c) 1999-2004 Intel Corporation"
 #define PFX			DRV_NAME ": "
@@ -641,7 +641,8 @@
 
 	/* Three cmds: write/erase enable, write data, write/erase disable */
 	cmd_addr_data[0] = op_ewen << (addr_len - 2);
-	cmd_addr_data[1] = (((op_write << addr_len) | addr) << 16) | data;
+	cmd_addr_data[1] = (((op_write << addr_len) | addr) << 16) |
+		cpu_to_le16(data);
 	cmd_addr_data[2] = op_ewds << (addr_len - 2);
 
 	/* Bit-bang cmds to write word to eeprom */
@@ -668,7 +669,6 @@
 		writeb(0, &nic->csr->eeprom_ctrl_lo);
 		e100_write_flush(nic); udelay(4);
 	}
-
 };
 
 /* General technique stolen from the eepro100 driver - very clever */
@@ -709,7 +709,7 @@
 	writeb(0, &nic->csr->eeprom_ctrl_lo);
 	e100_write_flush(nic); udelay(4);
 
-	return data;
+	return le16_to_cpu(data);
 };
 
 /* Load entire EEPROM image into driver cache and validate checksum */
@@ -724,12 +724,12 @@
 	for(addr = 0; addr < nic->eeprom_wc; addr++) {
 		nic->eeprom[addr] = e100_eeprom_read(nic, &addr_len, addr);
 		if(addr < nic->eeprom_wc - 1)
-			checksum += nic->eeprom[addr];
+			checksum += cpu_to_le16(nic->eeprom[addr]);
 	}
 
 	/* The checksum, stored in the last word, is calculated such that
 	 * the sum of words should be 0xBABA */
-	checksum = 0xBABA - checksum;
+	checksum = le16_to_cpu(0xBABA - checksum);
 	if(checksum != nic->eeprom[nic->eeprom_wc - 1]) {
 		DPRINTK(PROBE, ERR, "EEPROM corrupted\n");
 		return -EAGAIN;
@@ -756,9 +756,10 @@
 	/* The checksum, stored in the last word, is calculated such that
 	 * the sum of words should be 0xBABA */
 	for(addr = 0; addr < nic->eeprom_wc - 1; addr++)
-		checksum += nic->eeprom[addr];
-	nic->eeprom[nic->eeprom_wc - 1] = 0xBABA - checksum;
-	e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1, 0xBABA - checksum);
+		checksum += cpu_to_le16(nic->eeprom[addr]);
+	nic->eeprom[nic->eeprom_wc - 1] = le16_to_cpu(0xBABA - checksum);
+	e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1,
+		nic->eeprom[nic->eeprom_wc - 1]);
 
 	return 0;
 }
@@ -867,12 +868,12 @@
 
 static int mdio_read(struct net_device *netdev, int addr, int reg)
 {
-	return mdio_ctrl(netdev->priv, addr, mdi_read, reg, 0);
+	return mdio_ctrl(netdev_priv(netdev), addr, mdi_read, reg, 0);
 }
 
 static void mdio_write(struct net_device *netdev, int addr, int reg, int data)
 {
-	mdio_ctrl(netdev->priv, addr, mdi_write, reg, data);
+	mdio_ctrl(netdev_priv(netdev), addr, mdi_write, reg, data);
 }
 
 static void e100_get_defaults(struct nic *nic)
@@ -1098,7 +1099,7 @@
 
 static void e100_set_multicast_list(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	DPRINTK(HW, DEBUG, "mc_count=%d, flags=0x%04X\n",
 		netdev->mc_count, netdev->flags);
@@ -1251,7 +1252,7 @@
 
 static int e100_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	int err;
 
 	if(nic->flags & ich_10h_workaround) {
@@ -1392,12 +1393,12 @@
 	if(!(rx->skb = dev_alloc_skb(RFD_BUF_LEN + rx_offset)))
 		return -ENOMEM;
 
-	/* Align, init, and map the RFA. */
+	/* Align, init, and map the RFD. */
 	rx->skb->dev = nic->netdev;
 	skb_reserve(rx->skb, rx_offset);
 	memcpy(rx->skb->data, &nic->blank_rfd, sizeof(struct rfd));
 	rx->dma_addr = pci_map_single(nic->pdev, rx->skb->data,
-		RFD_BUF_LEN, PCI_DMA_FROMDEVICE);
+		RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL);
 
 	/* Link the RFD to end of RFA by linking previous RFD to
 	 * this one, and clearing EL bit of previous.  */
@@ -1408,7 +1409,7 @@
 		wmb();
 		prev_rfd->command &= ~cpu_to_le16(cb_el);
 		pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr,
-					       sizeof(struct rfd), PCI_DMA_TODEVICE);
+			sizeof(struct rfd), PCI_DMA_TODEVICE);
 	}
 
 	return 0;
@@ -1426,7 +1427,7 @@
 
 	/* Need to sync before taking a peek at cb_complete bit */
 	pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr,
-				    sizeof(struct rfd), PCI_DMA_FROMDEVICE);
+		sizeof(struct rfd), PCI_DMA_FROMDEVICE);
 	rfd_status = le16_to_cpu(rfd->status);
 
 	DPRINTK(RX_STATUS, DEBUG, "status=0x%04X\n", rfd_status);
@@ -1442,7 +1443,7 @@
 
 	/* Get data */
 	pci_unmap_single(nic->pdev, rx->dma_addr,
-			 RFD_BUF_LEN, PCI_DMA_FROMDEVICE);
+		RFD_BUF_LEN, PCI_DMA_FROMDEVICE);
 
 	/* Pull off the RFD and put the actual data (minus eth hdr) */
 	skb_reserve(skb, sizeof(struct rfd));
@@ -1545,7 +1546,7 @@
 static irqreturn_t e100_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *netdev = dev_id;
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	u8 stat_ack = readb(&nic->csr->scb.stat_ack);
 
 	DPRINTK(INTR, DEBUG, "stat_ack = 0x%02X\n", stat_ack);
@@ -1577,7 +1578,7 @@
 #ifdef CONFIG_E100_NAPI
 static int e100_poll(struct net_device *netdev, int *budget)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	unsigned int work_to_do = min(netdev->quota, *budget);
 	unsigned int work_done = 0;
 	int tx_cleaned;
@@ -1602,7 +1603,7 @@
 #ifdef CONFIG_NET_POLL_CONTROLLER
 static void e100_netpoll(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	e100_disable_irq(nic);
 	e100_intr(nic->pdev->irq, netdev, NULL);
 	e100_enable_irq(nic);
@@ -1611,13 +1612,13 @@
 
 static struct net_device_stats *e100_get_stats(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return &nic->net_stats;
 }
 
 static int e100_set_mac_address(struct net_device *netdev, void *p)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	struct sockaddr *addr = p;
 
 	if (!is_valid_ether_addr(addr->sa_data))
@@ -1689,12 +1690,12 @@
 
 static void e100_tx_timeout(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	DPRINTK(TX_ERR, DEBUG, "scb.status=0x%02X\n",
 		readb(&nic->csr->scb.status));
-	e100_down(netdev->priv);
-	e100_up(netdev->priv);
+	e100_down(netdev_priv(netdev));
+	e100_up(netdev_priv(netdev));
 }
 
 static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode)
@@ -1770,13 +1771,13 @@
 
 static int e100_get_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return mii_ethtool_gset(&nic->mii, cmd);
 }
 
 static int e100_set_settings(struct net_device *netdev, struct ethtool_cmd *cmd)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	int err;
 
 	mdio_write(netdev, nic->mii.phy_id, MII_BMCR, BMCR_RESET);
@@ -1789,7 +1790,7 @@
 static void e100_get_drvinfo(struct net_device *netdev,
 	struct ethtool_drvinfo *info)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	strcpy(info->driver, DRV_NAME);
 	strcpy(info->version, DRV_VERSION);
 	strcpy(info->fw_version, "N/A");
@@ -1798,7 +1799,7 @@
 
 static int e100_get_regs_len(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 #define E100_PHY_REGS		0x1C
 #define E100_REGS_LEN		1 + E100_PHY_REGS + \
 	sizeof(nic->mem->dump_buf) / sizeof(u32)
@@ -1808,7 +1809,7 @@
 static void e100_get_regs(struct net_device *netdev,
 	struct ethtool_regs *regs, void *p)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	u32 *buff = p;
 	int i;
 
@@ -1829,14 +1830,14 @@
 
 static void e100_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	wol->supported = (nic->mac >= mac_82558_D101_A4) ?  WAKE_MAGIC : 0;
 	wol->wolopts = (nic->flags & wol_magic) ? WAKE_MAGIC : 0;
 }
 
 static int e100_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	if(wol->wolopts != WAKE_MAGIC && wol->wolopts != 0)
 		return -EOPNOTSUPP;
@@ -1854,31 +1855,31 @@
 
 static u32 e100_get_msglevel(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return nic->msg_enable;
 }
 
 static void e100_set_msglevel(struct net_device *netdev, u32 value)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	nic->msg_enable = value;
 }
 
 static int e100_nway_reset(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return mii_nway_restart(&nic->mii);
 }
 
 static u32 e100_get_link(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return mii_link_ok(&nic->mii);
 }
 
 static int e100_get_eeprom_len(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	return nic->eeprom_wc << 1;
 }
 
@@ -1886,7 +1887,7 @@
 static int e100_get_eeprom(struct net_device *netdev,
 	struct ethtool_eeprom *eeprom, u8 *bytes)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	eeprom->magic = E100_EEPROM_MAGIC;
 	memcpy(bytes, &((u8 *)nic->eeprom)[eeprom->offset], eeprom->len);
@@ -1897,10 +1898,11 @@
 static int e100_set_eeprom(struct net_device *netdev,
 	struct ethtool_eeprom *eeprom, u8 *bytes)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	if(eeprom->magic != E100_EEPROM_MAGIC)
 		return -EINVAL;
+
 	memcpy(&((u8 *)nic->eeprom)[eeprom->offset], bytes, eeprom->len);
 
 	return e100_eeprom_save(nic, eeprom->offset >> 1,
@@ -1910,7 +1912,7 @@
 static void e100_get_ringparam(struct net_device *netdev,
 	struct ethtool_ringparam *ring)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	struct param_range *rfds = &nic->params.rfds;
 	struct param_range *cbs = &nic->params.cbs;
 
@@ -1927,7 +1929,7 @@
 static int e100_set_ringparam(struct net_device *netdev,
 	struct ethtool_ringparam *ring)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	struct param_range *rfds = &nic->params.rfds;
 	struct param_range *cbs = &nic->params.cbs;
 
@@ -1960,7 +1962,7 @@
 static void e100_diag_test(struct net_device *netdev,
 	struct ethtool_test *test, u64 *data)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	int i;
 
 	memset(data, 0, E100_TEST_LEN * sizeof(u64));
@@ -1981,7 +1983,7 @@
 
 static int e100_phys_id(struct net_device *netdev, u32 data)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	if(!data || data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ))
 		data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ);
@@ -2017,7 +2019,7 @@
 static void e100_get_ethtool_stats(struct net_device *netdev,
 	struct ethtool_stats *stats, u64 *data)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	int i;
 
 	for(i = 0; i < E100_NET_STATS_LEN; i++)
@@ -2072,7 +2074,7 @@
 
 static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr->ifr_data;
 
 	return generic_mii_ioctl(&nic->mii, mii, cmd, NULL);
@@ -2096,7 +2098,7 @@
 
 static int e100_open(struct net_device *netdev)
 {
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 	int err = 0;
 
 	netif_carrier_off(netdev);
@@ -2107,7 +2109,7 @@
 
 static int e100_close(struct net_device *netdev)
 {
-	e100_down(netdev->priv);
+	e100_down(netdev_priv(netdev));
 	return 0;
 }
 
@@ -2143,7 +2145,7 @@
 	netdev->poll_controller = e100_netpoll;
 #endif
 
-	nic = netdev->priv;
+	nic = netdev_priv(netdev);
 	nic->netdev = netdev;
 	nic->pdev = pdev;
 	nic->msg_enable = (1 << debug) - 1;
@@ -2209,9 +2211,8 @@
 
 	if((err = e100_eeprom_load(nic)))
 		goto err_out_free;
-	((u16 *)netdev->dev_addr)[0] = le16_to_cpu(nic->eeprom[0]);
-	((u16 *)netdev->dev_addr)[1] = le16_to_cpu(nic->eeprom[1]);
-	((u16 *)netdev->dev_addr)[2] = le16_to_cpu(nic->eeprom[2]);
+
+	memcpy(netdev->dev_addr, nic->eeprom, ETH_ALEN);
 	if(!is_valid_ether_addr(netdev->dev_addr)) {
 		DPRINTK(PROBE, ERR, "Invalid MAC address from "
 			"EEPROM, aborting.\n");
@@ -2258,7 +2259,7 @@
 	struct net_device *netdev = pci_get_drvdata(pdev);
 
 	if(netdev) {
-		struct nic *nic = netdev->priv;
+		struct nic *nic = netdev_priv(netdev);
 		unregister_netdev(netdev);
 		e100_free(nic);
 		iounmap(nic->csr);
@@ -2273,7 +2274,7 @@
 static int e100_suspend(struct pci_dev *pdev, u32 state)
 {
 	struct net_device *netdev = pci_get_drvdata(pdev);
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	if(netif_running(netdev))
 		e100_down(nic);
@@ -2291,7 +2292,7 @@
 static int e100_resume(struct pci_dev *pdev)
 {
 	struct net_device *netdev = pci_get_drvdata(pdev);
-	struct nic *nic = netdev->priv;
+	struct nic *nic = netdev_priv(netdev);
 
 	pci_set_power_state(pdev, 0);
 	pci_restore_state(pdev, nic->pm_state);
