aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ieee1394/eth1394.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@linux-foundation.org>2007-10-09 04:40:57 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:52 -0400
commit3b04ddde02cf1b6f14f2697da5c20eca5715017f (patch)
tree9da1341a5a399a507b5ea6bf5a3047506b8d8f8f /drivers/ieee1394/eth1394.c
parentb95cce3576813ac3f86bafa6b5daaaaf7574b0fe (diff)
[NET]: Move hardware header operations out of netdevice.
Since hardware header operations are part of the protocol class not the device instance, make them into a separate object and save memory. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/ieee1394/eth1394.c')
-rw-r--r--drivers/ieee1394/eth1394.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c
index b31f90082e35..dc9dce22f6a8 100644
--- a/drivers/ieee1394/eth1394.c
+++ b/drivers/ieee1394/eth1394.c
@@ -159,15 +159,16 @@ MODULE_PARM_DESC(max_partial_datagrams,
159 159
160 160
161static int ether1394_header(struct sk_buff *skb, struct net_device *dev, 161static int ether1394_header(struct sk_buff *skb, struct net_device *dev,
162 unsigned short type, void *daddr, void *saddr, 162 unsigned short type, const void *daddr,
163 unsigned len); 163 const void *saddr, unsigned len);
164static int ether1394_rebuild_header(struct sk_buff *skb); 164static int ether1394_rebuild_header(struct sk_buff *skb);
165static int ether1394_header_parse(const struct sk_buff *skb, 165static int ether1394_header_parse(const struct sk_buff *skb,
166 unsigned char *haddr); 166 unsigned char *haddr);
167static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh); 167static int ether1394_header_cache(const struct neighbour *neigh,
168 struct hh_cache *hh);
168static void ether1394_header_cache_update(struct hh_cache *hh, 169static void ether1394_header_cache_update(struct hh_cache *hh,
169 struct net_device *dev, 170 const struct net_device *dev,
170 unsigned char *haddr); 171 const unsigned char *haddr);
171static int ether1394_tx(struct sk_buff *skb, struct net_device *dev); 172static int ether1394_tx(struct sk_buff *skb, struct net_device *dev);
172static void ether1394_iso(struct hpsb_iso *iso); 173static void ether1394_iso(struct hpsb_iso *iso);
173 174
@@ -507,6 +508,14 @@ static void ether1394_reset_priv(struct net_device *dev, int set_mtu)
507 spin_unlock_irqrestore(&priv->lock, flags); 508 spin_unlock_irqrestore(&priv->lock, flags);
508} 509}
509 510
511static const struct header_ops ether1394_header_ops = {
512 .create = ether1394_header,
513 .rebuild = ether1394_rebuild_header,
514 .cache = ether1394_header_cache,
515 .cache_update = ether1394_header_cache_update,
516 .parse = ether1394_header_parse,
517};
518
510static void ether1394_init_dev(struct net_device *dev) 519static void ether1394_init_dev(struct net_device *dev)
511{ 520{
512 dev->open = ether1394_open; 521 dev->open = ether1394_open;
@@ -516,11 +525,7 @@ static void ether1394_init_dev(struct net_device *dev)
516 dev->tx_timeout = ether1394_tx_timeout; 525 dev->tx_timeout = ether1394_tx_timeout;
517 dev->change_mtu = ether1394_change_mtu; 526 dev->change_mtu = ether1394_change_mtu;
518 527
519 dev->hard_header = ether1394_header; 528 dev->header_ops = &ether1394_header_ops;
520 dev->rebuild_header = ether1394_rebuild_header;
521 dev->hard_header_cache = ether1394_header_cache;
522 dev->header_cache_update= ether1394_header_cache_update;
523 dev->hard_header_parse = ether1394_header_parse;
524 529
525 SET_ETHTOOL_OPS(dev, &ethtool_ops); 530 SET_ETHTOOL_OPS(dev, &ethtool_ops);
526 531
@@ -711,8 +716,8 @@ static void ether1394_host_reset(struct hpsb_host *host)
711 * saddr=NULL means use device source address 716 * saddr=NULL means use device source address
712 * daddr=NULL means leave destination address (eg unresolved arp). */ 717 * daddr=NULL means leave destination address (eg unresolved arp). */
713static int ether1394_header(struct sk_buff *skb, struct net_device *dev, 718static int ether1394_header(struct sk_buff *skb, struct net_device *dev,
714 unsigned short type, void *daddr, void *saddr, 719 unsigned short type, const void *daddr,
715 unsigned len) 720 const void *saddr, unsigned len)
716{ 721{
717 struct eth1394hdr *eth = 722 struct eth1394hdr *eth =
718 (struct eth1394hdr *)skb_push(skb, ETH1394_HLEN); 723 (struct eth1394hdr *)skb_push(skb, ETH1394_HLEN);
@@ -759,7 +764,8 @@ static int ether1394_header_parse(const struct sk_buff *skb,
759 return ETH1394_ALEN; 764 return ETH1394_ALEN;
760} 765}
761 766
762static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh) 767static int ether1394_header_cache(const struct neighbour *neigh,
768 struct hh_cache *hh)
763{ 769{
764 unsigned short type = hh->hh_type; 770 unsigned short type = hh->hh_type;
765 struct net_device *dev = neigh->dev; 771 struct net_device *dev = neigh->dev;
@@ -778,8 +784,8 @@ static int ether1394_header_cache(struct neighbour *neigh, struct hh_cache *hh)
778 784
779/* Called by Address Resolution module to notify changes in address. */ 785/* Called by Address Resolution module to notify changes in address. */
780static void ether1394_header_cache_update(struct hh_cache *hh, 786static void ether1394_header_cache_update(struct hh_cache *hh,
781 struct net_device *dev, 787 const struct net_device *dev,
782 unsigned char * haddr) 788 const unsigned char * haddr)
783{ 789{
784 memcpy((u8 *)hh->hh_data + 16 - ETH1394_HLEN, haddr, dev->addr_len); 790 memcpy((u8 *)hh->hh_data + 16 - ETH1394_HLEN, haddr, dev->addr_len);
785} 791}
@@ -899,8 +905,8 @@ static u16 ether1394_parse_encap(struct sk_buff *skb, struct net_device *dev,
899 } 905 }
900 906
901 /* Now add the ethernet header. */ 907 /* Now add the ethernet header. */
902 if (dev->hard_header(skb, dev, ntohs(ether_type), &dest_hw, NULL, 908 if (dev_hard_header(skb, dev, ntohs(ether_type), &dest_hw, NULL,
903 skb->len) >= 0) 909 skb->len) >= 0)
904 ret = ether1394_type_trans(skb, dev); 910 ret = ether1394_type_trans(skb, dev);
905 911
906 return ret; 912 return ret;