[PATCH] generic HDLC synclink config mismatch fix
Fix compile errors on mismatch between generic HDLC and synclink drivers. Notes: generic HDLC support for synclink drivers is *optional* so you can't just use depend on in Kconfig This solution is deemed the best after 7 months of review and criticism by many developers including AKPM. Read the threads on LKML before posting about this solution. Signed-off-by: Paul Fulghum <paulkf@microgate.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
3ee6f61ca0
commit
af69c7f924
@@ -83,8 +83,10 @@
|
||||
|
||||
#include "linux/synclink.h"
|
||||
|
||||
#ifdef CONFIG_HDLC_MODULE
|
||||
#define CONFIG_HDLC 1
|
||||
#if defined(CONFIG_HDLC) || (defined(CONFIG_HDLC_MODULE) && defined(CONFIG_SYNCLINK_GT_MODULE))
|
||||
#define SYNCLINK_GENERIC_HDLC 1
|
||||
#else
|
||||
#define SYNCLINK_GENERIC_HDLC 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -171,7 +173,7 @@ static void set_break(struct tty_struct *tty, int break_state);
|
||||
/*
|
||||
* generic HDLC support and callbacks
|
||||
*/
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
#define dev_to_port(D) (dev_to_hdlc(D)->priv)
|
||||
static void hdlcdev_tx_done(struct slgt_info *info);
|
||||
static void hdlcdev_rx(struct slgt_info *info, char *buf, int size);
|
||||
@@ -359,7 +361,7 @@ struct slgt_info {
|
||||
int netcount;
|
||||
int dosyncppp;
|
||||
spinlock_t netlock;
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
struct net_device *netdev;
|
||||
#endif
|
||||
|
||||
@@ -1354,7 +1356,7 @@ static void set_break(struct tty_struct *tty, int break_state)
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
|
||||
/**
|
||||
* called by generic HDLC layer when protocol selected (PPP, frame relay, etc.)
|
||||
@@ -2002,7 +2004,7 @@ static void dcd_change(struct slgt_info *info)
|
||||
} else {
|
||||
info->input_signal_events.dcd_down++;
|
||||
}
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (info->netcount) {
|
||||
if (info->signals & SerialSignal_DCD)
|
||||
netif_carrier_on(info->netdev);
|
||||
@@ -2180,7 +2182,7 @@ static void isr_txeom(struct slgt_info *info, unsigned short status)
|
||||
set_signals(info);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (info->netcount)
|
||||
hdlcdev_tx_done(info);
|
||||
else
|
||||
@@ -3306,7 +3308,7 @@ static void add_device(struct slgt_info *info)
|
||||
devstr, info->device_name, info->phys_reg_addr,
|
||||
info->irq_level, info->max_frame_size);
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
hdlcdev_init(info);
|
||||
#endif
|
||||
}
|
||||
@@ -3488,7 +3490,7 @@ static void slgt_cleanup(void)
|
||||
/* release devices */
|
||||
info = slgt_device_list;
|
||||
while(info) {
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
hdlcdev_exit(info);
|
||||
#endif
|
||||
free_dma_bufs(info);
|
||||
@@ -4434,7 +4436,7 @@ check_again:
|
||||
framesize = 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (framesize == 0) {
|
||||
struct net_device_stats *stats = hdlc_stats(info->netdev);
|
||||
stats->rx_errors++;
|
||||
@@ -4477,7 +4479,7 @@ check_again:
|
||||
framesize++;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (info->netcount)
|
||||
hdlcdev_rx(info,info->tmp_rbuf, framesize);
|
||||
else
|
||||
@@ -4780,7 +4782,7 @@ static void tx_timeout(unsigned long context)
|
||||
info->tx_count = 0;
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
|
||||
#ifdef CONFIG_HDLC
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (info->netcount)
|
||||
hdlcdev_tx_done(info);
|
||||
else
|
||||
|
Reference in New Issue
Block a user