|
|
|
@ -191,8 +191,6 @@ struct sk_buff* atm_alloc_tx(struct atm_vcc *, unsigned int);
|
|
|
|
|
static inline void atm_free_tx_skb_vcc(struct sk_buff *, struct atm_vcc *);
|
|
|
|
|
static inline struct sk_buff *get_skb_rx_pointer(unsigned int);
|
|
|
|
|
static inline int get_tx_desc(unsigned int);
|
|
|
|
|
static struct sk_buff* skb_duplicate(struct sk_buff *);
|
|
|
|
|
static struct sk_buff* skb_break_away_from_protocol(struct sk_buff *);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* mailbox handler and signal function
|
|
|
|
@ -523,7 +521,6 @@ static int ppe_send(struct atm_vcc *vcc, struct sk_buff *skb)
|
|
|
|
|
unsigned long flags;
|
|
|
|
|
struct tx_descriptor reg_desc = {0};
|
|
|
|
|
struct tx_inband_header *header;
|
|
|
|
|
struct sk_buff *new_skb;
|
|
|
|
|
|
|
|
|
|
if ( vcc == NULL || skb == NULL )
|
|
|
|
|
return -EINVAL;
|
|
|
|
@ -856,44 +853,6 @@ static inline int get_tx_desc(unsigned int conn)
|
|
|
|
|
return desc_base;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct sk_buff* skb_duplicate(struct sk_buff *skb)
|
|
|
|
|
{
|
|
|
|
|
struct sk_buff *new_skb;
|
|
|
|
|
|
|
|
|
|
new_skb = alloc_skb_tx(skb->len);
|
|
|
|
|
if ( new_skb == NULL )
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
skb_put(new_skb, skb->len);
|
|
|
|
|
memcpy(new_skb->data, skb->data, skb->len);
|
|
|
|
|
|
|
|
|
|
return new_skb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct sk_buff* skb_break_away_from_protocol(struct sk_buff *skb)
|
|
|
|
|
{
|
|
|
|
|
struct sk_buff *new_skb;
|
|
|
|
|
|
|
|
|
|
if ( skb_shared(skb) ) {
|
|
|
|
|
new_skb = skb_clone(skb, GFP_ATOMIC);
|
|
|
|
|
if ( new_skb == NULL )
|
|
|
|
|
return NULL;
|
|
|
|
|
} else
|
|
|
|
|
new_skb = skb_get(skb);
|
|
|
|
|
|
|
|
|
|
skb_dst_drop(new_skb);
|
|
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
|
|
nf_conntrack_put(new_skb->nfct);
|
|
|
|
|
new_skb->nfct = NULL;
|
|
|
|
|
#ifdef CONFIG_BRIDGE_NETFILTER
|
|
|
|
|
nf_bridge_put(new_skb->nf_bridge);
|
|
|
|
|
new_skb->nf_bridge = NULL;
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return new_skb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void free_tx_ring(unsigned int queue)
|
|
|
|
|
{
|
|
|
|
|
unsigned long flags;
|
|
|
|
|