150 lines
5.2 KiB
Diff
150 lines
5.2 KiB
Diff
diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c
|
|
index f6ba846..03fd9dd 100644
|
|
--- a/drivers/media/dvb/dvb-core/dvb_net.c
|
|
+++ b/drivers/media/dvb/dvb-core/dvb_net.c
|
|
@@ -125,6 +125,7 @@ static void hexdump( const unsigned char *buf, unsigned short len )
|
|
|
|
struct dvb_net_priv {
|
|
int in_use;
|
|
+ struct net_device_stats stats;
|
|
u16 pid;
|
|
struct net_device *net;
|
|
struct dvb_net *host;
|
|
@@ -383,8 +384,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
if (priv->ule_skb) {
|
|
dev_kfree_skb( priv->ule_skb );
|
|
/* Prepare for next SNDU. */
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_frame_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_frame_errors++;
|
|
}
|
|
reset_ule(priv);
|
|
priv->need_pusi = 1;
|
|
@@ -437,8 +438,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
dev_kfree_skb( priv->ule_skb );
|
|
/* Prepare for next SNDU. */
|
|
// reset_ule(priv); moved to below.
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_frame_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_frame_errors++;
|
|
}
|
|
reset_ule(priv);
|
|
/* skip to next PUSI. */
|
|
@@ -459,8 +460,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
/* Drop partly decoded SNDU, reset state, resync on PUSI. */
|
|
if (priv->ule_skb) {
|
|
dev_kfree_skb( priv->ule_skb );
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_frame_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_frame_errors++;
|
|
}
|
|
reset_ule(priv);
|
|
priv->need_pusi = 1;
|
|
@@ -476,8 +477,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
if (priv->ule_sndu_remain > 183) {
|
|
/* Current SNDU lacks more data than there could be available in the
|
|
* current TS cell. */
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_length_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_length_errors++;
|
|
printk(KERN_WARNING "%lu: Expected %d more SNDU bytes, but "
|
|
"got PUSI (pf %d, ts_remain %d). Flushing incomplete payload.\n",
|
|
priv->ts_count, priv->ule_sndu_remain, ts[4], ts_remain);
|
|
@@ -519,8 +520,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
if (priv->ule_sndu_len < 5) {
|
|
printk(KERN_WARNING "%lu: Invalid ULE SNDU length %u. "
|
|
"Resyncing.\n", priv->ts_count, priv->ule_sndu_len);
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_length_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_length_errors++;
|
|
priv->ule_sndu_len = 0;
|
|
priv->need_pusi = 1;
|
|
new_ts = 1;
|
|
@@ -572,7 +573,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
if (priv->ule_skb == NULL) {
|
|
printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
|
|
dev->name);
|
|
- dev->stats.rx_dropped++;
|
|
+ priv->stats.rx_dropped++;
|
|
return;
|
|
}
|
|
|
|
@@ -636,8 +637,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
ule_dump = 1;
|
|
#endif
|
|
|
|
- dev->stats.rx_errors++;
|
|
- dev->stats.rx_crc_errors++;
|
|
+ priv->stats.rx_errors++;
|
|
+ priv->stats.rx_crc_errors++;
|
|
dev_kfree_skb(priv->ule_skb);
|
|
} else {
|
|
/* CRC32 verified OK. */
|
|
@@ -743,8 +744,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
|
|
* receive the packet anyhow. */
|
|
/* if (priv->ule_dbit && skb->pkt_type == PACKET_OTHERHOST)
|
|
priv->ule_skb->pkt_type = PACKET_HOST; */
|
|
- dev->stats.rx_packets++;
|
|
- dev->stats.rx_bytes += priv->ule_skb->len;
|
|
+ priv->stats.rx_packets++;
|
|
+ priv->stats.rx_bytes += priv->ule_skb->len;
|
|
netif_rx(priv->ule_skb);
|
|
}
|
|
sndu_done:
|
|
@@ -799,7 +800,8 @@ static void dvb_net_sec(struct net_device *dev,
|
|
{
|
|
u8 *eth;
|
|
struct sk_buff *skb;
|
|
- struct net_device_stats *stats = &dev->stats;
|
|
+ struct net_device_stats *stats =
|
|
+ &((struct dvb_net_priv *) netdev_priv(dev))->stats;
|
|
int snap = 0;
|
|
|
|
/* note: pkt_len includes a 32bit checksum */
|
|
@@ -1214,29 +1216,28 @@ static int dvb_net_stop(struct net_device *dev)
|
|
return dvb_net_feed_stop(dev);
|
|
}
|
|
|
|
+static struct net_device_stats * dvb_net_get_stats(struct net_device *dev)
|
|
+{
|
|
+ return &((struct dvb_net_priv *) netdev_priv(dev))->stats;
|
|
+}
|
|
+
|
|
static const struct header_ops dvb_header_ops = {
|
|
.create = eth_header,
|
|
.parse = eth_header_parse,
|
|
.rebuild = eth_rebuild_header,
|
|
};
|
|
|
|
-
|
|
-static const struct net_device_ops dvb_netdev_ops = {
|
|
- .ndo_open = dvb_net_open,
|
|
- .ndo_stop = dvb_net_stop,
|
|
- .ndo_start_xmit = dvb_net_tx,
|
|
- .ndo_set_multicast_list = dvb_net_set_multicast_list,
|
|
- .ndo_set_mac_address = dvb_net_set_mac,
|
|
- .ndo_change_mtu = eth_change_mtu,
|
|
- .ndo_validate_addr = eth_validate_addr,
|
|
-};
|
|
-
|
|
static void dvb_net_setup(struct net_device *dev)
|
|
{
|
|
ether_setup(dev);
|
|
|
|
dev->header_ops = &dvb_header_ops;
|
|
- dev->netdev_ops = &dvb_netdev_ops;
|
|
+ dev->open = dvb_net_open;
|
|
+ dev->stop = dvb_net_stop;
|
|
+ dev->hard_start_xmit = dvb_net_tx;
|
|
+ dev->get_stats = dvb_net_get_stats;
|
|
+ dev->set_multicast_list = dvb_net_set_multicast_list;
|
|
+ dev->set_mac_address = dvb_net_set_mac;
|
|
dev->mtu = 4096;
|
|
dev->mc_count = 0;
|
|
|