net/seeq8005.c: fix inline compile error
PATCH 1/1 net/seeq8005.c: fix inline compile error
Trying to compile drivers/net/seeq8005.c in 2.6.8-rc1-mm1 using gcc 3.4 results in the following compile error:
<-- snip -->
...
CC drivers/net/seeq8005.odrivers/net/seeq8005.c: In function `seeq8005_rx':drivers/net/seeq8005.c:95: sorry, unimplemented: inlining failed in call to 'wait_for_buffer': function body not available drivers/net/seeq8005.c:479: sorry, unimplemented: called from here
make[2]: *** [drivers/net/seeq8005.o] Error 1
<-- snip -->
The patch below moves wait_for_buffer above the place where it is called the first time.
An alternative approach would be to remove the inline.
diffstat output:
drivers/net/seeq8005.c | 45 ++++++++++++++++++++--------------------- 1 files changed, 22 insertions(+), 23 deletions(-)
Signed-off-by Adrian Bunk <[email protected]>
drivers/net/seeq8005.c renamed from drivers/net/seeq8005.c.old +22 -23
@@ -83,6 +83,7 @@static void seeq8005_timeout (struct net_device *dev);static int seeq8005_send_packet (struct sk_buff *skb,struct net_device *dev);static irqreturn_t seeq8005_interrupt (int irq,void *dev_id,struct pt_regs *regs); +static inline void wait_for_buffer (struct net_device *dev);static void seeq8005_rx (struct net_device *dev);static int seeq8005_close (struct net_device *dev);static struct net_device_stats *seeq8005_get_stats (struct net_device *dev);
@@ -92,7 +93,6 @@#define tx_done (dev) (inw(SEEQ_STATUS) & SEEQSTAT_TX_ON)static void hardware_send_packet (struct net_device *dev,char *buf,int length);extern void seeq8005_init (struct net_device *dev,int startp); -static inline void wait_for_buffer (struct net_device *dev);/* Check for a network adaptor of this type, and return '0' iff one exists.
@@ -459,6 +459,27 @@return IRQ_RETVAL (handled); } +/* +* wait_for_buffer +* +* This routine waits for the SEEQ chip to assert that the FIFO is ready +* by checking for a window interrupt, and then clearing it. This has to +* occur in the interrupt handler! +*/ +inline void wait_for_buffer (struct net_device * dev) +{ +int ioaddr = dev->base_addr; +unsigned long tmp; +int status; + + tmp = jiffies +HZ ; +while ( ( ((status=inw (SEEQ_STATUS )) &SEEQSTAT_WINDOW_INT ) !=SEEQSTAT_WINDOW_INT ) &&time_before (jiffies, tmp)) +cpu_relax (); + +if ( (status &SEEQSTAT_WINDOW_INT ) ==SEEQSTAT_WINDOW_INT ) +outw (SEEQCMD_WINDOW_INT_ACK | (status &SEEQCMD_INT_MASK ),SEEQ_CMD ); +} +/* We have a good packet(s), get it/them out of the buffers. */ static void seeq8005_rx (struct net_device *dev) {
@@ -711,28 +732,6 @@ } - -/* -* wait_for_buffer -* -* This routine waits for the SEEQ chip to assert that the FIFO is ready -* by checking for a window interrupt, and then clearing it. This has to -* occur in the interrupt handler! -*/ -inline void wait_for_buffer (struct net_device * dev) -{ -int ioaddr = dev->base_addr; -unsigned long tmp; -int status; - - tmp = jiffies +HZ ; -while ( ( ((status=inw (SEEQ_STATUS )) &SEEQSTAT_WINDOW_INT ) !=SEEQSTAT_WINDOW_INT ) &&time_before (jiffies, tmp)) -cpu_relax (); - -if ( (status &SEEQSTAT_WINDOW_INT ) ==SEEQSTAT_WINDOW_INT ) -outw (SEEQCMD_WINDOW_INT_ACK | (status &SEEQCMD_INT_MASK ),SEEQ_CMD ); -} -#ifdef MODULE static struct net_device *dev_seeq;