[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <alpine.LFD.1.00.0802220925520.2732@xanadu.home>
Date: Fri, 22 Feb 2008 09:26:35 -0500 (EST)
From: Nicolas Pitre <nico@....org>
To: Magnus Damm <magnus.damm@...il.com>
Cc: netdev@...r.kernel.org, lethal@...ux-sh.org,
akpm@...ux-foundation.org
Subject: Re: [PATCH 01/04] smc91x: pass along private data V2
On Fri, 22 Feb 2008, Magnus Damm wrote:
> Pass a private data pointer to macros and functions. This makes it easy
> to later on make run time decisions. This patch does not change any logic.
> These changes should be optimized away during compilation.
>
> V2 changes the macro argument name from "priv" to "lp".
>
> Signed-off-by: Magnus Damm <damm@...l.co.jp>
Acked-by: Nicolas Pitre <nico@....org>
> ---
>
> drivers/net/smc91x.c | 301 +++++++++++++++++++++++++-------------------------
> drivers/net/smc91x.h | 254 +++++++++++++++++++++---------------------
> 2 files changed, 280 insertions(+), 275 deletions(-)
>
> --- 0001/drivers/net/smc91x.c
> +++ work/drivers/net/smc91x.c 2008-02-22 14:07:43.000000000 +0900
> @@ -220,22 +220,22 @@ static void PRINT_PKT(u_char *buf, int l
>
>
> /* this enables an interrupt in the interrupt mask register */
> -#define SMC_ENABLE_INT(x) do { \
> +#define SMC_ENABLE_INT(lp, x) do { \
> unsigned char mask; \
> spin_lock_irq(&lp->lock); \
> - mask = SMC_GET_INT_MASK(); \
> + mask = SMC_GET_INT_MASK(lp); \
> mask |= (x); \
> - SMC_SET_INT_MASK(mask); \
> + SMC_SET_INT_MASK(lp, mask); \
> spin_unlock_irq(&lp->lock); \
> } while (0)
>
> /* this disables an interrupt from the interrupt mask register */
> -#define SMC_DISABLE_INT(x) do { \
> +#define SMC_DISABLE_INT(lp, x) do { \
> unsigned char mask; \
> spin_lock_irq(&lp->lock); \
> - mask = SMC_GET_INT_MASK(); \
> + mask = SMC_GET_INT_MASK(lp); \
> mask &= ~(x); \
> - SMC_SET_INT_MASK(mask); \
> + SMC_SET_INT_MASK(lp, mask); \
> spin_unlock_irq(&lp->lock); \
> } while (0)
>
> @@ -244,10 +244,10 @@ static void PRINT_PKT(u_char *buf, int l
> * if at all, but let's avoid deadlocking the system if the hardware
> * decides to go south.
> */
> -#define SMC_WAIT_MMU_BUSY() do { \
> - if (unlikely(SMC_GET_MMU_CMD() & MC_BUSY)) { \
> +#define SMC_WAIT_MMU_BUSY(lp) do { \
> + if (unlikely(SMC_GET_MMU_CMD(lp) & MC_BUSY)) { \
> unsigned long timeout = jiffies + 2; \
> - while (SMC_GET_MMU_CMD() & MC_BUSY) { \
> + while (SMC_GET_MMU_CMD(lp) & MC_BUSY) { \
> if (time_after(jiffies, timeout)) { \
> printk("%s: timeout %s line %d\n", \
> dev->name, __FILE__, __LINE__); \
> @@ -273,8 +273,8 @@ static void smc_reset(struct net_device
>
> /* Disable all interrupts, block TX tasklet */
> spin_lock_irq(&lp->lock);
> - SMC_SELECT_BANK(2);
> - SMC_SET_INT_MASK(0);
> + SMC_SELECT_BANK(lp, 2);
> + SMC_SET_INT_MASK(lp, 0);
> pending_skb = lp->pending_tx_skb;
> lp->pending_tx_skb = NULL;
> spin_unlock_irq(&lp->lock);
> @@ -290,15 +290,15 @@ static void smc_reset(struct net_device
> * This resets the registers mostly to defaults, but doesn't
> * affect EEPROM. That seems unnecessary
> */
> - SMC_SELECT_BANK(0);
> - SMC_SET_RCR(RCR_SOFTRST);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RCR(lp, RCR_SOFTRST);
>
> /*
> * Setup the Configuration Register
> * This is necessary because the CONFIG_REG is not affected
> * by a soft reset
> */
> - SMC_SELECT_BANK(1);
> + SMC_SELECT_BANK(lp, 1);
>
> cfg = CONFIG_DEFAULT;
>
> @@ -316,7 +316,7 @@ static void smc_reset(struct net_device
> */
> cfg |= CONFIG_EPH_POWER_EN;
>
> - SMC_SET_CONFIG(cfg);
> + SMC_SET_CONFIG(lp, cfg);
>
> /* this should pause enough for the chip to be happy */
> /*
> @@ -329,12 +329,12 @@ static void smc_reset(struct net_device
> udelay(1);
>
> /* Disable transmit and receive functionality */
> - SMC_SELECT_BANK(0);
> - SMC_SET_RCR(RCR_CLEAR);
> - SMC_SET_TCR(TCR_CLEAR);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RCR(lp, RCR_CLEAR);
> + SMC_SET_TCR(lp, TCR_CLEAR);
>
> - SMC_SELECT_BANK(1);
> - ctl = SMC_GET_CTL() | CTL_LE_ENABLE;
> + SMC_SELECT_BANK(lp, 1);
> + ctl = SMC_GET_CTL(lp) | CTL_LE_ENABLE;
>
> /*
> * Set the control register to automatically release successfully
> @@ -345,12 +345,12 @@ static void smc_reset(struct net_device
> ctl |= CTL_AUTO_RELEASE;
> else
> ctl &= ~CTL_AUTO_RELEASE;
> - SMC_SET_CTL(ctl);
> + SMC_SET_CTL(lp, ctl);
>
> /* Reset the MMU */
> - SMC_SELECT_BANK(2);
> - SMC_SET_MMU_CMD(MC_RESET);
> - SMC_WAIT_MMU_BUSY();
> + SMC_SELECT_BANK(lp, 2);
> + SMC_SET_MMU_CMD(lp, MC_RESET);
> + SMC_WAIT_MMU_BUSY(lp);
> }
>
> /*
> @@ -365,19 +365,19 @@ static void smc_enable(struct net_device
> DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
>
> /* see the header file for options in TCR/RCR DEFAULT */
> - SMC_SELECT_BANK(0);
> - SMC_SET_TCR(lp->tcr_cur_mode);
> - SMC_SET_RCR(lp->rcr_cur_mode);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_TCR(lp, lp->tcr_cur_mode);
> + SMC_SET_RCR(lp, lp->rcr_cur_mode);
>
> - SMC_SELECT_BANK(1);
> - SMC_SET_MAC_ADDR(dev->dev_addr);
> + SMC_SELECT_BANK(lp, 1);
> + SMC_SET_MAC_ADDR(lp, dev->dev_addr);
>
> /* now, enable interrupts */
> mask = IM_EPH_INT|IM_RX_OVRN_INT|IM_RCV_INT;
> if (lp->version >= (CHIP_91100 << 4))
> mask |= IM_MDINT;
> - SMC_SELECT_BANK(2);
> - SMC_SET_INT_MASK(mask);
> + SMC_SELECT_BANK(lp, 2);
> + SMC_SET_INT_MASK(lp, mask);
>
> /*
> * From this point the register bank must _NOT_ be switched away
> @@ -400,8 +400,8 @@ static void smc_shutdown(struct net_devi
>
> /* no more interrupts for me */
> spin_lock_irq(&lp->lock);
> - SMC_SELECT_BANK(2);
> - SMC_SET_INT_MASK(0);
> + SMC_SELECT_BANK(lp, 2);
> + SMC_SET_INT_MASK(lp, 0);
> pending_skb = lp->pending_tx_skb;
> lp->pending_tx_skb = NULL;
> spin_unlock_irq(&lp->lock);
> @@ -409,14 +409,14 @@ static void smc_shutdown(struct net_devi
> dev_kfree_skb(pending_skb);
>
> /* and tell the card to stay away from that nasty outside world */
> - SMC_SELECT_BANK(0);
> - SMC_SET_RCR(RCR_CLEAR);
> - SMC_SET_TCR(TCR_CLEAR);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RCR(lp, RCR_CLEAR);
> + SMC_SET_TCR(lp, TCR_CLEAR);
>
> #ifdef POWER_DOWN
> /* finally, shut the chip down */
> - SMC_SELECT_BANK(1);
> - SMC_SET_CONFIG(SMC_GET_CONFIG() & ~CONFIG_EPH_POWER_EN);
> + SMC_SELECT_BANK(lp, 1);
> + SMC_SET_CONFIG(lp, SMC_GET_CONFIG(lp) & ~CONFIG_EPH_POWER_EN);
> #endif
> }
>
> @@ -431,17 +431,17 @@ static inline void smc_rcv(struct net_d
>
> DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
>
> - packet_number = SMC_GET_RXFIFO();
> + packet_number = SMC_GET_RXFIFO(lp);
> if (unlikely(packet_number & RXFIFO_REMPTY)) {
> PRINTK("%s: smc_rcv with nothing on FIFO.\n", dev->name);
> return;
> }
>
> /* read from start of packet */
> - SMC_SET_PTR(PTR_READ | PTR_RCV | PTR_AUTOINC);
> + SMC_SET_PTR(lp, PTR_READ | PTR_RCV | PTR_AUTOINC);
>
> /* First two words are status and packet length */
> - SMC_GET_PKT_HDR(status, packet_len);
> + SMC_GET_PKT_HDR(lp, status, packet_len);
> packet_len &= 0x07ff; /* mask off top bits */
> DBG(2, "%s: RX PNR 0x%x STATUS 0x%04x LENGTH 0x%04x (%d)\n",
> dev->name, packet_number, status,
> @@ -460,8 +460,8 @@ static inline void smc_rcv(struct net_d
> dev->name, packet_len, status);
> status |= RS_TOOSHORT;
> }
> - SMC_WAIT_MMU_BUSY();
> - SMC_SET_MMU_CMD(MC_RELEASE);
> + SMC_WAIT_MMU_BUSY(lp);
> + SMC_SET_MMU_CMD(lp, MC_RELEASE);
> dev->stats.rx_errors++;
> if (status & RS_ALGNERR)
> dev->stats.rx_frame_errors++;
> @@ -490,8 +490,8 @@ static inline void smc_rcv(struct net_d
> if (unlikely(skb == NULL)) {
> printk(KERN_NOTICE "%s: Low memory, packet dropped.\n",
> dev->name);
> - SMC_WAIT_MMU_BUSY();
> - SMC_SET_MMU_CMD(MC_RELEASE);
> + SMC_WAIT_MMU_BUSY(lp);
> + SMC_SET_MMU_CMD(lp, MC_RELEASE);
> dev->stats.rx_dropped++;
> return;
> }
> @@ -510,10 +510,10 @@ static inline void smc_rcv(struct net_d
> */
> data_len = packet_len - ((status & RS_ODDFRAME) ? 5 : 6);
> data = skb_put(skb, data_len);
> - SMC_PULL_DATA(data, packet_len - 4);
> + SMC_PULL_DATA(lp, data, packet_len - 4);
>
> - SMC_WAIT_MMU_BUSY();
> - SMC_SET_MMU_CMD(MC_RELEASE);
> + SMC_WAIT_MMU_BUSY(lp);
> + SMC_SET_MMU_CMD(lp, MC_RELEASE);
>
> PRINT_PKT(data, packet_len - 4);
>
> @@ -591,7 +591,7 @@ static void smc_hardware_send_pkt(unsign
> }
> lp->pending_tx_skb = NULL;
>
> - packet_no = SMC_GET_AR();
> + packet_no = SMC_GET_AR(lp);
> if (unlikely(packet_no & AR_FAILED)) {
> printk("%s: Memory allocation failed.\n", dev->name);
> dev->stats.tx_errors++;
> @@ -601,8 +601,8 @@ static void smc_hardware_send_pkt(unsign
> }
>
> /* point to the beginning of the packet */
> - SMC_SET_PN(packet_no);
> - SMC_SET_PTR(PTR_AUTOINC);
> + SMC_SET_PN(lp, packet_no);
> + SMC_SET_PTR(lp, PTR_AUTOINC);
>
> buf = skb->data;
> len = skb->len;
> @@ -614,13 +614,13 @@ static void smc_hardware_send_pkt(unsign
> * Send the packet length (+6 for status words, length, and ctl.
> * The card will pad to 64 bytes with zeroes if packet is too small.
> */
> - SMC_PUT_PKT_HDR(0, len + 6);
> + SMC_PUT_PKT_HDR(lp, 0, len + 6);
>
> /* send the actual data */
> - SMC_PUSH_DATA(buf, len & ~1);
> + SMC_PUSH_DATA(lp, buf, len & ~1);
>
> /* Send final ctl word with the last byte if there is one */
> - SMC_outw(((len & 1) ? (0x2000 | buf[len-1]) : 0), ioaddr, DATA_REG);
> + SMC_outw(((len & 1) ? (0x2000 | buf[len-1]) : 0), ioaddr, DATA_REG(lp));
>
> /*
> * If THROTTLE_TX_PKTS is set, we stop the queue here. This will
> @@ -634,14 +634,14 @@ static void smc_hardware_send_pkt(unsign
> netif_stop_queue(dev);
>
> /* queue the packet for TX */
> - SMC_SET_MMU_CMD(MC_ENQUEUE);
> + SMC_SET_MMU_CMD(lp, MC_ENQUEUE);
> smc_special_unlock(&lp->lock);
>
> dev->trans_start = jiffies;
> dev->stats.tx_packets++;
> dev->stats.tx_bytes += len;
>
> - SMC_ENABLE_INT(IM_TX_INT | IM_TX_EMPTY_INT);
> + SMC_ENABLE_INT(lp, IM_TX_INT | IM_TX_EMPTY_INT);
>
> done: if (!THROTTLE_TX_PKTS)
> netif_wake_queue(dev);
> @@ -688,7 +688,7 @@ static int smc_hard_start_xmit(struct sk
> smc_special_lock(&lp->lock);
>
> /* now, try to allocate the memory */
> - SMC_SET_MMU_CMD(MC_ALLOC | numPages);
> + SMC_SET_MMU_CMD(lp, MC_ALLOC | numPages);
>
> /*
> * Poll the chip for a short amount of time in case the
> @@ -696,9 +696,9 @@ static int smc_hard_start_xmit(struct sk
> */
> poll_count = MEMORY_WAIT_TIME;
> do {
> - status = SMC_GET_INT();
> + status = SMC_GET_INT(lp);
> if (status & IM_ALLOC_INT) {
> - SMC_ACK_INT(IM_ALLOC_INT);
> + SMC_ACK_INT(lp, IM_ALLOC_INT);
> break;
> }
> } while (--poll_count);
> @@ -710,7 +710,7 @@ static int smc_hard_start_xmit(struct sk
> /* oh well, wait until the chip finds memory later */
> netif_stop_queue(dev);
> DBG(2, "%s: TX memory allocation deferred.\n", dev->name);
> - SMC_ENABLE_INT(IM_ALLOC_INT);
> + SMC_ENABLE_INT(lp, IM_ALLOC_INT);
> } else {
> /*
> * Allocation succeeded: push packet to the chip's own memory
> @@ -736,19 +736,19 @@ static void smc_tx(struct net_device *de
> DBG(3, "%s: %s\n", dev->name, __FUNCTION__);
>
> /* If the TX FIFO is empty then nothing to do */
> - packet_no = SMC_GET_TXFIFO();
> + packet_no = SMC_GET_TXFIFO(lp);
> if (unlikely(packet_no & TXFIFO_TEMPTY)) {
> PRINTK("%s: smc_tx with nothing on FIFO.\n", dev->name);
> return;
> }
>
> /* select packet to read from */
> - saved_packet = SMC_GET_PN();
> - SMC_SET_PN(packet_no);
> + saved_packet = SMC_GET_PN(lp);
> + SMC_SET_PN(lp, packet_no);
>
> /* read the first word (status word) from this packet */
> - SMC_SET_PTR(PTR_AUTOINC | PTR_READ);
> - SMC_GET_PKT_HDR(tx_status, pkt_len);
> + SMC_SET_PTR(lp, PTR_AUTOINC | PTR_READ);
> + SMC_GET_PKT_HDR(lp, tx_status, pkt_len);
> DBG(2, "%s: TX STATUS 0x%04x PNR 0x%02x\n",
> dev->name, tx_status, packet_no);
>
> @@ -771,17 +771,17 @@ static void smc_tx(struct net_device *de
> }
>
> /* kill the packet */
> - SMC_WAIT_MMU_BUSY();
> - SMC_SET_MMU_CMD(MC_FREEPKT);
> + SMC_WAIT_MMU_BUSY(lp);
> + SMC_SET_MMU_CMD(lp, MC_FREEPKT);
>
> /* Don't restore Packet Number Reg until busy bit is cleared */
> - SMC_WAIT_MMU_BUSY();
> - SMC_SET_PN(saved_packet);
> + SMC_WAIT_MMU_BUSY(lp);
> + SMC_SET_PN(lp, saved_packet);
>
> /* re-enable transmit */
> - SMC_SELECT_BANK(0);
> - SMC_SET_TCR(lp->tcr_cur_mode);
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_TCR(lp, lp->tcr_cur_mode);
> + SMC_SELECT_BANK(lp, 2);
> }
>
>
> @@ -793,7 +793,7 @@ static void smc_mii_out(struct net_devic
> void __iomem *ioaddr = lp->base;
> unsigned int mii_reg, mask;
>
> - mii_reg = SMC_GET_MII() & ~(MII_MCLK | MII_MDOE | MII_MDO);
> + mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO);
> mii_reg |= MII_MDOE;
>
> for (mask = 1 << (bits - 1); mask; mask >>= 1) {
> @@ -802,9 +802,9 @@ static void smc_mii_out(struct net_devic
> else
> mii_reg &= ~MII_MDO;
>
> - SMC_SET_MII(mii_reg);
> + SMC_SET_MII(lp, mii_reg);
> udelay(MII_DELAY);
> - SMC_SET_MII(mii_reg | MII_MCLK);
> + SMC_SET_MII(lp, mii_reg | MII_MCLK);
> udelay(MII_DELAY);
> }
> }
> @@ -815,16 +815,16 @@ static unsigned int smc_mii_in(struct ne
> void __iomem *ioaddr = lp->base;
> unsigned int mii_reg, mask, val;
>
> - mii_reg = SMC_GET_MII() & ~(MII_MCLK | MII_MDOE | MII_MDO);
> - SMC_SET_MII(mii_reg);
> + mii_reg = SMC_GET_MII(lp) & ~(MII_MCLK | MII_MDOE | MII_MDO);
> + SMC_SET_MII(lp, mii_reg);
>
> for (mask = 1 << (bits - 1), val = 0; mask; mask >>= 1) {
> - if (SMC_GET_MII() & MII_MDI)
> + if (SMC_GET_MII(lp) & MII_MDI)
> val |= mask;
>
> - SMC_SET_MII(mii_reg);
> + SMC_SET_MII(lp, mii_reg);
> udelay(MII_DELAY);
> - SMC_SET_MII(mii_reg | MII_MCLK);
> + SMC_SET_MII(lp, mii_reg | MII_MCLK);
> udelay(MII_DELAY);
> }
>
> @@ -840,7 +840,7 @@ static int smc_phy_read(struct net_devic
> void __iomem *ioaddr = lp->base;
> unsigned int phydata;
>
> - SMC_SELECT_BANK(3);
> + SMC_SELECT_BANK(lp, 3);
>
> /* Idle - 32 ones */
> smc_mii_out(dev, 0xffffffff, 32);
> @@ -852,12 +852,12 @@ static int smc_phy_read(struct net_devic
> phydata = smc_mii_in(dev, 18);
>
> /* Return to idle state */
> - SMC_SET_MII(SMC_GET_MII() & ~(MII_MCLK|MII_MDOE|MII_MDO));
> + SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
>
> DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
> __FUNCTION__, phyaddr, phyreg, phydata);
>
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 2);
> return phydata;
> }
>
> @@ -870,7 +870,7 @@ static void smc_phy_write(struct net_dev
> struct smc_local *lp = netdev_priv(dev);
> void __iomem *ioaddr = lp->base;
>
> - SMC_SELECT_BANK(3);
> + SMC_SELECT_BANK(lp, 3);
>
> /* Idle - 32 ones */
> smc_mii_out(dev, 0xffffffff, 32);
> @@ -879,12 +879,12 @@ static void smc_phy_write(struct net_dev
> smc_mii_out(dev, 5 << 28 | phyaddr << 23 | phyreg << 18 | 2 << 16 | phydata, 32);
>
> /* Return to idle state */
> - SMC_SET_MII(SMC_GET_MII() & ~(MII_MCLK|MII_MDOE|MII_MDO));
> + SMC_SET_MII(lp, SMC_GET_MII(lp) & ~(MII_MCLK|MII_MDOE|MII_MDO));
>
> DBG(3, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
> __FUNCTION__, phyaddr, phyreg, phydata);
>
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 2);
> }
>
> /*
> @@ -957,9 +957,9 @@ static int smc_phy_fixed(struct net_devi
> smc_phy_write(dev, phyaddr, MII_BMCR, bmcr);
>
> /* Re-Configure the Receive/Phy Control register */
> - SMC_SELECT_BANK(0);
> - SMC_SET_RPC(lp->rpc_cur_mode);
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RPC(lp, lp->rpc_cur_mode);
> + SMC_SELECT_BANK(lp, 2);
>
> return 1;
> }
> @@ -1050,8 +1050,8 @@ static void smc_phy_check_media(struct n
> lp->tcr_cur_mode &= ~TCR_SWFDUP;
> }
>
> - SMC_SELECT_BANK(0);
> - SMC_SET_TCR(lp->tcr_cur_mode);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_TCR(lp, lp->tcr_cur_mode);
> }
> }
>
> @@ -1100,8 +1100,8 @@ static void smc_phy_configure(struct wor
> PHY_INT_SPDDET | PHY_INT_DPLXDET);
>
> /* Configure the Receive/Phy Control register */
> - SMC_SELECT_BANK(0);
> - SMC_SET_RPC(lp->rpc_cur_mode);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RPC(lp, lp->rpc_cur_mode);
>
> /* If the user requested no auto neg, then go set his request */
> if (lp->mii.force_media) {
> @@ -1158,7 +1158,7 @@ static void smc_phy_configure(struct wor
> smc_phy_check_media(dev, 1);
>
> smc_phy_configure_exit:
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 2);
> spin_unlock_irq(&lp->lock);
> lp->work_pending = 0;
> }
> @@ -1200,9 +1200,9 @@ static void smc_10bt_check_media(struct
>
> old_carrier = netif_carrier_ok(dev) ? 1 : 0;
>
> - SMC_SELECT_BANK(0);
> - new_carrier = (SMC_GET_EPH_STATUS() & ES_LINK_OK) ? 1 : 0;
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 0);
> + new_carrier = (SMC_GET_EPH_STATUS(lp) & ES_LINK_OK) ? 1 : 0;
> + SMC_SELECT_BANK(lp, 2);
>
> if (init || (old_carrier != new_carrier)) {
> if (!new_carrier) {
> @@ -1224,11 +1224,11 @@ static void smc_eph_interrupt(struct net
>
> smc_10bt_check_media(dev, 0);
>
> - SMC_SELECT_BANK(1);
> - ctl = SMC_GET_CTL();
> - SMC_SET_CTL(ctl & ~CTL_LE_ENABLE);
> - SMC_SET_CTL(ctl);
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 1);
> + ctl = SMC_GET_CTL(lp);
> + SMC_SET_CTL(lp, ctl & ~CTL_LE_ENABLE);
> + SMC_SET_CTL(lp, ctl);
> + SMC_SELECT_BANK(lp, 2);
> }
>
> /*
> @@ -1252,22 +1252,22 @@ static irqreturn_t smc_interrupt(int irq
> * ISR. */
> SMC_INTERRUPT_PREAMBLE;
>
> - saved_pointer = SMC_GET_PTR();
> - mask = SMC_GET_INT_MASK();
> - SMC_SET_INT_MASK(0);
> + saved_pointer = SMC_GET_PTR(lp);
> + mask = SMC_GET_INT_MASK(lp);
> + SMC_SET_INT_MASK(lp, 0);
>
> /* set a timeout value, so I don't stay here forever */
> timeout = MAX_IRQ_LOOPS;
>
> do {
> - status = SMC_GET_INT();
> + status = SMC_GET_INT(lp);
>
> DBG(2, "%s: INT 0x%02x MASK 0x%02x MEM 0x%04x FIFO 0x%04x\n",
> dev->name, status, mask,
> - ({ int meminfo; SMC_SELECT_BANK(0);
> - meminfo = SMC_GET_MIR();
> - SMC_SELECT_BANK(2); meminfo; }),
> - SMC_GET_FIFO());
> + ({ int meminfo; SMC_SELECT_BANK(lp, 0);
> + meminfo = SMC_GET_MIR(lp);
> + SMC_SELECT_BANK(lp, 2); meminfo; }),
> + SMC_GET_FIFO(lp));
>
> status &= mask;
> if (!status)
> @@ -1277,7 +1277,7 @@ static irqreturn_t smc_interrupt(int irq
> /* do this before RX as it will free memory quickly */
> DBG(3, "%s: TX int\n", dev->name);
> smc_tx(dev);
> - SMC_ACK_INT(IM_TX_INT);
> + SMC_ACK_INT(lp, IM_TX_INT);
> if (THROTTLE_TX_PKTS)
> netif_wake_queue(dev);
> } else if (status & IM_RCV_INT) {
> @@ -1292,9 +1292,9 @@ static irqreturn_t smc_interrupt(int irq
> mask &= ~IM_TX_EMPTY_INT;
>
> /* update stats */
> - SMC_SELECT_BANK(0);
> - card_stats = SMC_GET_COUNTER();
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 0);
> + card_stats = SMC_GET_COUNTER(lp);
> + SMC_SELECT_BANK(lp, 2);
>
> /* single collisions */
> dev->stats.collisions += card_stats & 0xF;
> @@ -1304,26 +1304,26 @@ static irqreturn_t smc_interrupt(int irq
> dev->stats.collisions += card_stats & 0xF;
> } else if (status & IM_RX_OVRN_INT) {
> DBG(1, "%s: RX overrun (EPH_ST 0x%04x)\n", dev->name,
> - ({ int eph_st; SMC_SELECT_BANK(0);
> - eph_st = SMC_GET_EPH_STATUS();
> - SMC_SELECT_BANK(2); eph_st; }) );
> - SMC_ACK_INT(IM_RX_OVRN_INT);
> + ({ int eph_st; SMC_SELECT_BANK(lp, 0);
> + eph_st = SMC_GET_EPH_STATUS(lp);
> + SMC_SELECT_BANK(lp, 2); eph_st; }));
> + SMC_ACK_INT(lp, IM_RX_OVRN_INT);
> dev->stats.rx_errors++;
> dev->stats.rx_fifo_errors++;
> } else if (status & IM_EPH_INT) {
> smc_eph_interrupt(dev);
> } else if (status & IM_MDINT) {
> - SMC_ACK_INT(IM_MDINT);
> + SMC_ACK_INT(lp, IM_MDINT);
> smc_phy_interrupt(dev);
> } else if (status & IM_ERCV_INT) {
> - SMC_ACK_INT(IM_ERCV_INT);
> + SMC_ACK_INT(lp, IM_ERCV_INT);
> PRINTK("%s: UNSUPPORTED: ERCV INTERRUPT \n", dev->name);
> }
> } while (--timeout);
>
> /* restore register states */
> - SMC_SET_PTR(saved_pointer);
> - SMC_SET_INT_MASK(mask);
> + SMC_SET_PTR(lp, saved_pointer);
> + SMC_SET_INT_MASK(lp, mask);
> spin_unlock(&lp->lock);
>
> if (timeout == MAX_IRQ_LOOPS)
> @@ -1366,13 +1366,13 @@ static void smc_timeout(struct net_devic
> DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
>
> spin_lock_irq(&lp->lock);
> - status = SMC_GET_INT();
> - mask = SMC_GET_INT_MASK();
> - fifo = SMC_GET_FIFO();
> - SMC_SELECT_BANK(0);
> - eph_st = SMC_GET_EPH_STATUS();
> - meminfo = SMC_GET_MIR();
> - SMC_SELECT_BANK(2);
> + status = SMC_GET_INT(lp);
> + mask = SMC_GET_INT_MASK(lp);
> + fifo = SMC_GET_FIFO(lp);
> + SMC_SELECT_BANK(lp, 0);
> + eph_st = SMC_GET_EPH_STATUS(lp);
> + meminfo = SMC_GET_MIR(lp);
> + SMC_SELECT_BANK(lp, 2);
> spin_unlock_irq(&lp->lock);
> PRINTK( "%s: TX timeout (INT 0x%02x INTMASK 0x%02x "
> "MEM 0x%04x FIFO 0x%04x EPH_ST 0x%04x)\n",
> @@ -1492,13 +1492,13 @@ static void smc_set_multicast_list(struc
> }
>
> spin_lock_irq(&lp->lock);
> - SMC_SELECT_BANK(0);
> - SMC_SET_RCR(lp->rcr_cur_mode);
> + SMC_SELECT_BANK(lp, 0);
> + SMC_SET_RCR(lp, lp->rcr_cur_mode);
> if (update_multicast) {
> - SMC_SELECT_BANK(3);
> - SMC_SET_MCAST(multicast_table);
> + SMC_SELECT_BANK(lp, 3);
> + SMC_SET_MCAST(lp, multicast_table);
> }
> - SMC_SELECT_BANK(2);
> + SMC_SELECT_BANK(lp, 2);
> spin_unlock_irq(&lp->lock);
> }
>
> @@ -1702,8 +1702,9 @@ static const struct ethtool_ops smc_etht
> * I just deleted auto_irq.c, since it was never built...
> * --jgarzik
> */
> -static int __init smc_findirq(void __iomem *ioaddr)
> +static int __init smc_findirq(struct smc_local *lp)
> {
> + void __iomem *ioaddr = lp->base;
> int timeout = 20;
> unsigned long cookie;
>
> @@ -1717,14 +1718,14 @@ static int __init smc_findirq(void __iom
> * when done.
> */
> /* enable ALLOCation interrupts ONLY */
> - SMC_SELECT_BANK(2);
> - SMC_SET_INT_MASK(IM_ALLOC_INT);
> + SMC_SELECT_BANK(lp, 2);
> + SMC_SET_INT_MASK(lp, IM_ALLOC_INT);
>
> /*
> * Allocate 512 bytes of memory. Note that the chip was just
> * reset so all the memory is available
> */
> - SMC_SET_MMU_CMD(MC_ALLOC | 1);
> + SMC_SET_MMU_CMD(lp, MC_ALLOC | 1);
>
> /*
> * Wait until positive that the interrupt has been generated
> @@ -1732,7 +1733,7 @@ static int __init smc_findirq(void __iom
> do {
> int int_status;
> udelay(10);
> - int_status = SMC_GET_INT();
> + int_status = SMC_GET_INT(lp);
> if (int_status & IM_ALLOC_INT)
> break; /* got the interrupt */
> } while (--timeout);
> @@ -1745,7 +1746,7 @@ static int __init smc_findirq(void __iom
> */
>
> /* and disable all interrupts again */
> - SMC_SET_INT_MASK(0);
> + SMC_SET_INT_MASK(lp, 0);
>
> /* and return what I found */
> return probe_irq_off(cookie);
> @@ -1788,7 +1789,7 @@ static int __init smc_probe(struct net_d
> DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
>
> /* First, see if the high byte is 0x33 */
> - val = SMC_CURRENT_BANK();
> + val = SMC_CURRENT_BANK(lp);
> DBG(2, "%s: bank signature probe returned 0x%04x\n", CARDNAME, val);
> if ((val & 0xFF00) != 0x3300) {
> if ((val & 0xFF) == 0x33) {
> @@ -1804,8 +1805,8 @@ static int __init smc_probe(struct net_d
> * The above MIGHT indicate a device, but I need to write to
> * further test this.
> */
> - SMC_SELECT_BANK(0);
> - val = SMC_CURRENT_BANK();
> + SMC_SELECT_BANK(lp, 0);
> + val = SMC_CURRENT_BANK(lp);
> if ((val & 0xFF00) != 0x3300) {
> retval = -ENODEV;
> goto err_out;
> @@ -1817,8 +1818,8 @@ static int __init smc_probe(struct net_d
> * register to bank 1, so I can access the base address
> * register
> */
> - SMC_SELECT_BANK(1);
> - val = SMC_GET_BASE();
> + SMC_SELECT_BANK(lp, 1);
> + val = SMC_GET_BASE(lp);
> val = ((val & 0x1F00) >> 3) << SMC_IO_SHIFT;
> if (((unsigned int)ioaddr & (0x3e0 << SMC_IO_SHIFT)) != val) {
> printk("%s: IOADDR %p doesn't match configuration (%x).\n",
> @@ -1830,8 +1831,8 @@ static int __init smc_probe(struct net_d
> * recognize. These might need to be added to later,
> * as future revisions could be added.
> */
> - SMC_SELECT_BANK(3);
> - revision_register = SMC_GET_REV();
> + SMC_SELECT_BANK(lp, 3);
> + revision_register = SMC_GET_REV(lp);
> DBG(2, "%s: revision = 0x%04x\n", CARDNAME, revision_register);
> version_string = chip_ids[ (revision_register >> 4) & 0xF];
> if (!version_string || (revision_register & 0xff00) != 0x3300) {
> @@ -1855,8 +1856,8 @@ static int __init smc_probe(struct net_d
> spin_lock_init(&lp->lock);
>
> /* Get the MAC address */
> - SMC_SELECT_BANK(1);
> - SMC_GET_MAC_ADDR(dev->dev_addr);
> + SMC_SELECT_BANK(lp, 1);
> + SMC_GET_MAC_ADDR(lp, dev->dev_addr);
>
> /* now, reset the chip, and put it into a known state */
> smc_reset(dev);
> @@ -1881,7 +1882,7 @@ static int __init smc_probe(struct net_d
>
> trials = 3;
> while (trials--) {
> - dev->irq = smc_findirq(ioaddr);
> + dev->irq = smc_findirq(lp);
> if (dev->irq)
> break;
> /* kick the card and try again */
> --- 0001/drivers/net/smc91x.h
> +++ work/drivers/net/smc91x.h 2008-02-22 14:05:18.000000000 +0900
> @@ -720,7 +720,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Transmit Control Register
> /* BANK 0 */
> -#define TCR_REG SMC_REG(0x0000, 0)
> +#define TCR_REG(lp) SMC_REG(lp, 0x0000, 0)
> #define TCR_ENABLE 0x0001 // When 1 we can transmit
> #define TCR_LOOP 0x0002 // Controls output pin LBK
> #define TCR_FORCOL 0x0004 // When 1 will force a collision
> @@ -739,7 +739,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // EPH Status Register
> /* BANK 0 */
> -#define EPH_STATUS_REG SMC_REG(0x0002, 0)
> +#define EPH_STATUS_REG(lp) SMC_REG(lp, 0x0002, 0)
> #define ES_TX_SUC 0x0001 // Last TX was successful
> #define ES_SNGL_COL 0x0002 // Single collision detected for last tx
> #define ES_MUL_COL 0x0004 // Multiple collisions detected for last tx
> @@ -758,7 +758,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Receive Control Register
> /* BANK 0 */
> -#define RCR_REG SMC_REG(0x0004, 0)
> +#define RCR_REG(lp) SMC_REG(lp, 0x0004, 0)
> #define RCR_RX_ABORT 0x0001 // Set if a rx frame was aborted
> #define RCR_PRMS 0x0002 // Enable promiscuous mode
> #define RCR_ALMUL 0x0004 // When set accepts all multicast frames
> @@ -775,17 +775,17 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Counter Register
> /* BANK 0 */
> -#define COUNTER_REG SMC_REG(0x0006, 0)
> +#define COUNTER_REG(lp) SMC_REG(lp, 0x0006, 0)
>
>
> // Memory Information Register
> /* BANK 0 */
> -#define MIR_REG SMC_REG(0x0008, 0)
> +#define MIR_REG(lp) SMC_REG(lp, 0x0008, 0)
>
>
> // Receive/Phy Control Register
> /* BANK 0 */
> -#define RPC_REG SMC_REG(0x000A, 0)
> +#define RPC_REG(lp) SMC_REG(lp, 0x000A, 0)
> #define RPC_SPEED 0x2000 // When 1 PHY is in 100Mbps mode.
> #define RPC_DPLX 0x1000 // When 1 PHY is in Full-Duplex Mode
> #define RPC_ANEG 0x0800 // When 1 PHY is in Auto-Negotiate Mode
> @@ -819,7 +819,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Configuration Reg
> /* BANK 1 */
> -#define CONFIG_REG SMC_REG(0x0000, 1)
> +#define CONFIG_REG(lp) SMC_REG(lp, 0x0000, 1)
> #define CONFIG_EXT_PHY 0x0200 // 1=external MII, 0=internal Phy
> #define CONFIG_GPCNTRL 0x0400 // Inverse value drives pin nCNTRL
> #define CONFIG_NO_WAIT 0x1000 // When 1 no extra wait states on ISA bus
> @@ -831,24 +831,24 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Base Address Register
> /* BANK 1 */
> -#define BASE_REG SMC_REG(0x0002, 1)
> +#define BASE_REG(lp) SMC_REG(lp, 0x0002, 1)
>
>
> // Individual Address Registers
> /* BANK 1 */
> -#define ADDR0_REG SMC_REG(0x0004, 1)
> -#define ADDR1_REG SMC_REG(0x0006, 1)
> -#define ADDR2_REG SMC_REG(0x0008, 1)
> +#define ADDR0_REG(lp) SMC_REG(lp, 0x0004, 1)
> +#define ADDR1_REG(lp) SMC_REG(lp, 0x0006, 1)
> +#define ADDR2_REG(lp) SMC_REG(lp, 0x0008, 1)
>
>
> // General Purpose Register
> /* BANK 1 */
> -#define GP_REG SMC_REG(0x000A, 1)
> +#define GP_REG(lp) SMC_REG(lp, 0x000A, 1)
>
>
> // Control Register
> /* BANK 1 */
> -#define CTL_REG SMC_REG(0x000C, 1)
> +#define CTL_REG(lp) SMC_REG(lp, 0x000C, 1)
> #define CTL_RCV_BAD 0x4000 // When 1 bad CRC packets are received
> #define CTL_AUTO_RELEASE 0x0800 // When 1 tx pages are released automatically
> #define CTL_LE_ENABLE 0x0080 // When 1 enables Link Error interrupt
> @@ -861,7 +861,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // MMU Command Register
> /* BANK 2 */
> -#define MMU_CMD_REG SMC_REG(0x0000, 2)
> +#define MMU_CMD_REG(lp) SMC_REG(lp, 0x0000, 2)
> #define MC_BUSY 1 // When 1 the last release has not completed
> #define MC_NOP (0<<5) // No Op
> #define MC_ALLOC (1<<5) // OR with number of 256 byte packets
> @@ -875,30 +875,30 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Packet Number Register
> /* BANK 2 */
> -#define PN_REG SMC_REG(0x0002, 2)
> +#define PN_REG(lp) SMC_REG(lp, 0x0002, 2)
>
>
> // Allocation Result Register
> /* BANK 2 */
> -#define AR_REG SMC_REG(0x0003, 2)
> +#define AR_REG(lp) SMC_REG(lp, 0x0003, 2)
> #define AR_FAILED 0x80 // Alocation Failed
>
>
> // TX FIFO Ports Register
> /* BANK 2 */
> -#define TXFIFO_REG SMC_REG(0x0004, 2)
> +#define TXFIFO_REG(lp) SMC_REG(lp, 0x0004, 2)
> #define TXFIFO_TEMPTY 0x80 // TX FIFO Empty
>
> // RX FIFO Ports Register
> /* BANK 2 */
> -#define RXFIFO_REG SMC_REG(0x0005, 2)
> +#define RXFIFO_REG(lp) SMC_REG(lp, 0x0005, 2)
> #define RXFIFO_REMPTY 0x80 // RX FIFO Empty
>
> -#define FIFO_REG SMC_REG(0x0004, 2)
> +#define FIFO_REG(lp) SMC_REG(lp, 0x0004, 2)
>
> // Pointer Register
> /* BANK 2 */
> -#define PTR_REG SMC_REG(0x0006, 2)
> +#define PTR_REG(lp) SMC_REG(lp, 0x0006, 2)
> #define PTR_RCV 0x8000 // 1=Receive area, 0=Transmit area
> #define PTR_AUTOINC 0x4000 // Auto increment the pointer on each access
> #define PTR_READ 0x2000 // When 1 the operation is a read
> @@ -906,17 +906,17 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Data Register
> /* BANK 2 */
> -#define DATA_REG SMC_REG(0x0008, 2)
> +#define DATA_REG(lp) SMC_REG(lp, 0x0008, 2)
>
>
> // Interrupt Status/Acknowledge Register
> /* BANK 2 */
> -#define INT_REG SMC_REG(0x000C, 2)
> +#define INT_REG(lp) SMC_REG(lp, 0x000C, 2)
>
>
> // Interrupt Mask Register
> /* BANK 2 */
> -#define IM_REG SMC_REG(0x000D, 2)
> +#define IM_REG(lp) SMC_REG(lp, 0x000D, 2)
> #define IM_MDINT 0x80 // PHY MI Register 18 Interrupt
> #define IM_ERCV_INT 0x40 // Early Receive Interrupt
> #define IM_EPH_INT 0x20 // Set by Ethernet Protocol Handler section
> @@ -929,15 +929,15 @@ smc_pxa_dma_irq(int dma, void *dummy)
>
> // Multicast Table Registers
> /* BANK 3 */
> -#define MCAST_REG1 SMC_REG(0x0000, 3)
> -#define MCAST_REG2 SMC_REG(0x0002, 3)
> -#define MCAST_REG3 SMC_REG(0x0004, 3)
> -#define MCAST_REG4 SMC_REG(0x0006, 3)
> +#define MCAST_REG1(lp) SMC_REG(lp, 0x0000, 3)
> +#define MCAST_REG2(lp) SMC_REG(lp, 0x0002, 3)
> +#define MCAST_REG3(lp) SMC_REG(lp, 0x0004, 3)
> +#define MCAST_REG4(lp) SMC_REG(lp, 0x0006, 3)
>
>
> // Management Interface Register (MII)
> /* BANK 3 */
> -#define MII_REG SMC_REG(0x0008, 3)
> +#define MII_REG(lp) SMC_REG(lp, 0x0008, 3)
> #define MII_MSK_CRS100 0x4000 // Disables CRS100 detection during tx half dup
> #define MII_MDOE 0x0008 // MII Output Enable
> #define MII_MCLK 0x0004 // MII Clock, pin MDCLK
> @@ -948,20 +948,20 @@ smc_pxa_dma_irq(int dma, void *dummy)
> // Revision Register
> /* BANK 3 */
> /* ( hi: chip id low: rev # ) */
> -#define REV_REG SMC_REG(0x000A, 3)
> +#define REV_REG(lp) SMC_REG(lp, 0x000A, 3)
>
>
> // Early RCV Register
> /* BANK 3 */
> /* this is NOT on SMC9192 */
> -#define ERCV_REG SMC_REG(0x000C, 3)
> +#define ERCV_REG(lp) SMC_REG(lp, 0x000C, 3)
> #define ERCV_RCV_DISCRD 0x0080 // When 1 discards a packet being received
> #define ERCV_THRESHOLD 0x001F // ERCV Threshold Mask
>
>
> // External Register
> /* BANK 7 */
> -#define EXT_REG SMC_REG(0x0000, 7)
> +#define EXT_REG(lp) SMC_REG(lp, 0x0000, 7)
>
>
> #define CHIP_9192 3
> @@ -1085,9 +1085,9 @@ static const char * chip_ids[ 16 ] = {
> */
>
> #if SMC_DEBUG > 0
> -#define SMC_REG(reg, bank) \
> +#define SMC_REG(lp, reg, bank) \
> ({ \
> - int __b = SMC_CURRENT_BANK(); \
> + int __b = SMC_CURRENT_BANK(lp); \
> if (unlikely((__b & ~0xf0) != (0x3300 | bank))) { \
> printk( "%s: bank reg screwed (0x%04x)\n", \
> CARDNAME, __b ); \
> @@ -1096,7 +1096,7 @@ static const char * chip_ids[ 16 ] = {
> reg<<SMC_IO_SHIFT; \
> })
> #else
> -#define SMC_REG(reg, bank) (reg<<SMC_IO_SHIFT)
> +#define SMC_REG(lp, reg, bank) (reg<<SMC_IO_SHIFT)
> #endif
>
> /*
> @@ -1110,65 +1110,65 @@ static const char * chip_ids[ 16 ] = {
> */
> #define SMC_MUST_ALIGN_WRITE SMC_CAN_USE_32BIT
>
> -#define SMC_GET_PN() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, PN_REG)) \
> - : (SMC_inw(ioaddr, PN_REG) & 0xFF) )
> +#define SMC_GET_PN(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, PN_REG(lp))) \
> + : (SMC_inw(ioaddr, PN_REG(lp)) & 0xFF))
>
> -#define SMC_SET_PN(x) \
> +#define SMC_SET_PN(lp, x) \
> do { \
> if (SMC_MUST_ALIGN_WRITE) \
> - SMC_outl((x)<<16, ioaddr, SMC_REG(0, 2)); \
> + SMC_outl((x)<<16, ioaddr, SMC_REG(lp, 0, 2)); \
> else if (SMC_CAN_USE_8BIT) \
> - SMC_outb(x, ioaddr, PN_REG); \
> + SMC_outb(x, ioaddr, PN_REG(lp)); \
> else \
> - SMC_outw(x, ioaddr, PN_REG); \
> + SMC_outw(x, ioaddr, PN_REG(lp)); \
> } while (0)
>
> -#define SMC_GET_AR() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, AR_REG)) \
> - : (SMC_inw(ioaddr, PN_REG) >> 8) )
> +#define SMC_GET_AR(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, AR_REG(lp))) \
> + : (SMC_inw(ioaddr, PN_REG(lp)) >> 8))
>
> -#define SMC_GET_TXFIFO() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, TXFIFO_REG)) \
> - : (SMC_inw(ioaddr, TXFIFO_REG) & 0xFF) )
> +#define SMC_GET_TXFIFO(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, TXFIFO_REG(lp))) \
> + : (SMC_inw(ioaddr, TXFIFO_REG(lp)) & 0xFF))
>
> -#define SMC_GET_RXFIFO() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, RXFIFO_REG)) \
> - : (SMC_inw(ioaddr, TXFIFO_REG) >> 8) )
> +#define SMC_GET_RXFIFO(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, RXFIFO_REG(lp))) \
> + : (SMC_inw(ioaddr, TXFIFO_REG(lp)) >> 8))
>
> -#define SMC_GET_INT() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, INT_REG)) \
> - : (SMC_inw(ioaddr, INT_REG) & 0xFF) )
> +#define SMC_GET_INT(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, INT_REG(lp))) \
> + : (SMC_inw(ioaddr, INT_REG(lp)) & 0xFF))
>
> -#define SMC_ACK_INT(x) \
> +#define SMC_ACK_INT(lp, x) \
> do { \
> if (SMC_CAN_USE_8BIT) \
> - SMC_outb(x, ioaddr, INT_REG); \
> + SMC_outb(x, ioaddr, INT_REG(lp)); \
> else { \
> unsigned long __flags; \
> int __mask; \
> local_irq_save(__flags); \
> - __mask = SMC_inw( ioaddr, INT_REG ) & ~0xff; \
> - SMC_outw( __mask | (x), ioaddr, INT_REG ); \
> + __mask = SMC_inw(ioaddr, INT_REG(lp)) & ~0xff; \
> + SMC_outw(__mask | (x), ioaddr, INT_REG(lp)); \
> local_irq_restore(__flags); \
> } \
> } while (0)
>
> -#define SMC_GET_INT_MASK() \
> - ( SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, IM_REG)) \
> - : (SMC_inw( ioaddr, INT_REG ) >> 8) )
> +#define SMC_GET_INT_MASK(lp) \
> + (SMC_CAN_USE_8BIT ? (SMC_inb(ioaddr, IM_REG(lp))) \
> + : (SMC_inw(ioaddr, INT_REG(lp)) >> 8))
>
> -#define SMC_SET_INT_MASK(x) \
> +#define SMC_SET_INT_MASK(lp, x) \
> do { \
> if (SMC_CAN_USE_8BIT) \
> - SMC_outb(x, ioaddr, IM_REG); \
> + SMC_outb(x, ioaddr, IM_REG(lp)); \
> else \
> - SMC_outw((x) << 8, ioaddr, INT_REG); \
> + SMC_outw((x) << 8, ioaddr, INT_REG(lp)); \
> } while (0)
>
> -#define SMC_CURRENT_BANK() SMC_inw(ioaddr, BANK_SELECT)
> +#define SMC_CURRENT_BANK(lp) SMC_inw(ioaddr, BANK_SELECT)
>
> -#define SMC_SELECT_BANK(x) \
> +#define SMC_SELECT_BANK(lp, x) \
> do { \
> if (SMC_MUST_ALIGN_WRITE) \
> SMC_outl((x)<<16, ioaddr, 12<<SMC_IO_SHIFT); \
> @@ -1176,118 +1176,119 @@ static const char * chip_ids[ 16 ] = {
> SMC_outw(x, ioaddr, BANK_SELECT); \
> } while (0)
>
> -#define SMC_GET_BASE() SMC_inw(ioaddr, BASE_REG)
> +#define SMC_GET_BASE(lp) SMC_inw(ioaddr, BASE_REG(lp))
>
> -#define SMC_SET_BASE(x) SMC_outw(x, ioaddr, BASE_REG)
> +#define SMC_SET_BASE(lp, x) SMC_outw(x, ioaddr, BASE_REG(lp))
>
> -#define SMC_GET_CONFIG() SMC_inw(ioaddr, CONFIG_REG)
> +#define SMC_GET_CONFIG(lp) SMC_inw(ioaddr, CONFIG_REG(lp))
>
> -#define SMC_SET_CONFIG(x) SMC_outw(x, ioaddr, CONFIG_REG)
> +#define SMC_SET_CONFIG(lp, x) SMC_outw(x, ioaddr, CONFIG_REG(lp))
>
> -#define SMC_GET_COUNTER() SMC_inw(ioaddr, COUNTER_REG)
> +#define SMC_GET_COUNTER(lp) SMC_inw(ioaddr, COUNTER_REG(lp))
>
> -#define SMC_GET_CTL() SMC_inw(ioaddr, CTL_REG)
> +#define SMC_GET_CTL(lp) SMC_inw(ioaddr, CTL_REG(lp))
>
> -#define SMC_SET_CTL(x) SMC_outw(x, ioaddr, CTL_REG)
> +#define SMC_SET_CTL(lp, x) SMC_outw(x, ioaddr, CTL_REG(lp))
>
> -#define SMC_GET_MII() SMC_inw(ioaddr, MII_REG)
> +#define SMC_GET_MII(lp) SMC_inw(ioaddr, MII_REG(lp))
>
> -#define SMC_SET_MII(x) SMC_outw(x, ioaddr, MII_REG)
> +#define SMC_SET_MII(lp, x) SMC_outw(x, ioaddr, MII_REG(lp))
>
> -#define SMC_GET_MIR() SMC_inw(ioaddr, MIR_REG)
> +#define SMC_GET_MIR(lp) SMC_inw(ioaddr, MIR_REG(lp))
>
> -#define SMC_SET_MIR(x) SMC_outw(x, ioaddr, MIR_REG)
> +#define SMC_SET_MIR(lp, x) SMC_outw(x, ioaddr, MIR_REG(lp))
>
> -#define SMC_GET_MMU_CMD() SMC_inw(ioaddr, MMU_CMD_REG)
> +#define SMC_GET_MMU_CMD(lp) SMC_inw(ioaddr, MMU_CMD_REG(lp))
>
> -#define SMC_SET_MMU_CMD(x) SMC_outw(x, ioaddr, MMU_CMD_REG)
> +#define SMC_SET_MMU_CMD(lp, x) SMC_outw(x, ioaddr, MMU_CMD_REG(lp))
>
> -#define SMC_GET_FIFO() SMC_inw(ioaddr, FIFO_REG)
> +#define SMC_GET_FIFO(lp) SMC_inw(ioaddr, FIFO_REG(lp))
>
> -#define SMC_GET_PTR() SMC_inw(ioaddr, PTR_REG)
> +#define SMC_GET_PTR(lp) SMC_inw(ioaddr, PTR_REG(lp))
>
> -#define SMC_SET_PTR(x) \
> +#define SMC_SET_PTR(lp, x) \
> do { \
> if (SMC_MUST_ALIGN_WRITE) \
> - SMC_outl((x)<<16, ioaddr, SMC_REG(4, 2)); \
> + SMC_outl((x)<<16, ioaddr, SMC_REG(lp, 4, 2)); \
> else \
> - SMC_outw(x, ioaddr, PTR_REG); \
> + SMC_outw(x, ioaddr, PTR_REG(lp)); \
> } while (0)
>
> -#define SMC_GET_EPH_STATUS() SMC_inw(ioaddr, EPH_STATUS_REG)
> +#define SMC_GET_EPH_STATUS(lp) SMC_inw(ioaddr, EPH_STATUS_REG(lp))
>
> -#define SMC_GET_RCR() SMC_inw(ioaddr, RCR_REG)
> +#define SMC_GET_RCR(lp) SMC_inw(ioaddr, RCR_REG(lp))
>
> -#define SMC_SET_RCR(x) SMC_outw(x, ioaddr, RCR_REG)
> +#define SMC_SET_RCR(lp, x) SMC_outw(x, ioaddr, RCR_REG(lp))
>
> -#define SMC_GET_REV() SMC_inw(ioaddr, REV_REG)
> +#define SMC_GET_REV(lp) SMC_inw(ioaddr, REV_REG(lp))
>
> -#define SMC_GET_RPC() SMC_inw(ioaddr, RPC_REG)
> +#define SMC_GET_RPC(lp) SMC_inw(ioaddr, RPC_REG(lp))
>
> -#define SMC_SET_RPC(x) \
> +#define SMC_SET_RPC(lp, x) \
> do { \
> if (SMC_MUST_ALIGN_WRITE) \
> - SMC_outl((x)<<16, ioaddr, SMC_REG(8, 0)); \
> + SMC_outl((x)<<16, ioaddr, SMC_REG(lp, 8, 0)); \
> else \
> - SMC_outw(x, ioaddr, RPC_REG); \
> + SMC_outw(x, ioaddr, RPC_REG(lp)); \
> } while (0)
>
> -#define SMC_GET_TCR() SMC_inw(ioaddr, TCR_REG)
> +#define SMC_GET_TCR(lp) SMC_inw(ioaddr, TCR_REG(lp))
>
> -#define SMC_SET_TCR(x) SMC_outw(x, ioaddr, TCR_REG)
> +#define SMC_SET_TCR(lp, x) SMC_outw(x, ioaddr, TCR_REG(lp))
>
> #ifndef SMC_GET_MAC_ADDR
> -#define SMC_GET_MAC_ADDR(addr) \
> +#define SMC_GET_MAC_ADDR(lp, addr) \
> do { \
> unsigned int __v; \
> - __v = SMC_inw( ioaddr, ADDR0_REG ); \
> + __v = SMC_inw(ioaddr, ADDR0_REG(lp)); \
> addr[0] = __v; addr[1] = __v >> 8; \
> - __v = SMC_inw( ioaddr, ADDR1_REG ); \
> + __v = SMC_inw(ioaddr, ADDR1_REG(lp)); \
> addr[2] = __v; addr[3] = __v >> 8; \
> - __v = SMC_inw( ioaddr, ADDR2_REG ); \
> + __v = SMC_inw(ioaddr, ADDR2_REG(lp)); \
> addr[4] = __v; addr[5] = __v >> 8; \
> } while (0)
> #endif
>
> -#define SMC_SET_MAC_ADDR(addr) \
> +#define SMC_SET_MAC_ADDR(lp, addr) \
> do { \
> - SMC_outw( addr[0]|(addr[1] << 8), ioaddr, ADDR0_REG ); \
> - SMC_outw( addr[2]|(addr[3] << 8), ioaddr, ADDR1_REG ); \
> - SMC_outw( addr[4]|(addr[5] << 8), ioaddr, ADDR2_REG ); \
> + SMC_outw(addr[0]|(addr[1] << 8), ioaddr, ADDR0_REG(lp)); \
> + SMC_outw(addr[2]|(addr[3] << 8), ioaddr, ADDR1_REG(lp)); \
> + SMC_outw(addr[4]|(addr[5] << 8), ioaddr, ADDR2_REG(lp)); \
> } while (0)
>
> -#define SMC_SET_MCAST(x) \
> +#define SMC_SET_MCAST(lp, x) \
> do { \
> const unsigned char *mt = (x); \
> - SMC_outw( mt[0] | (mt[1] << 8), ioaddr, MCAST_REG1 ); \
> - SMC_outw( mt[2] | (mt[3] << 8), ioaddr, MCAST_REG2 ); \
> - SMC_outw( mt[4] | (mt[5] << 8), ioaddr, MCAST_REG3 ); \
> - SMC_outw( mt[6] | (mt[7] << 8), ioaddr, MCAST_REG4 ); \
> + SMC_outw(mt[0] | (mt[1] << 8), ioaddr, MCAST_REG1(lp)); \
> + SMC_outw(mt[2] | (mt[3] << 8), ioaddr, MCAST_REG2(lp)); \
> + SMC_outw(mt[4] | (mt[5] << 8), ioaddr, MCAST_REG3(lp)); \
> + SMC_outw(mt[6] | (mt[7] << 8), ioaddr, MCAST_REG4(lp)); \
> } while (0)
>
> -#define SMC_PUT_PKT_HDR(status, length) \
> +#define SMC_PUT_PKT_HDR(lp, status, length) \
> do { \
> if (SMC_CAN_USE_32BIT) \
> - SMC_outl((status) | (length)<<16, ioaddr, DATA_REG); \
> + SMC_outl((status) | (length)<<16, ioaddr, \
> + DATA_REG(lp)); \
> else { \
> - SMC_outw(status, ioaddr, DATA_REG); \
> - SMC_outw(length, ioaddr, DATA_REG); \
> + SMC_outw(status, ioaddr, DATA_REG(lp)); \
> + SMC_outw(length, ioaddr, DATA_REG(lp)); \
> } \
> } while (0)
>
> -#define SMC_GET_PKT_HDR(status, length) \
> +#define SMC_GET_PKT_HDR(lp, status, length) \
> do { \
> if (SMC_CAN_USE_32BIT) { \
> - unsigned int __val = SMC_inl(ioaddr, DATA_REG); \
> + unsigned int __val = SMC_inl(ioaddr, DATA_REG(lp)); \
> (status) = __val & 0xffff; \
> (length) = __val >> 16; \
> } else { \
> - (status) = SMC_inw(ioaddr, DATA_REG); \
> - (length) = SMC_inw(ioaddr, DATA_REG); \
> + (status) = SMC_inw(ioaddr, DATA_REG(lp)); \
> + (length) = SMC_inw(ioaddr, DATA_REG(lp)); \
> } \
> } while (0)
>
> -#define SMC_PUSH_DATA(p, l) \
> +#define SMC_PUSH_DATA(lp, p, l) \
> do { \
> if (SMC_CAN_USE_32BIT) { \
> void *__ptr = (p); \
> @@ -1295,23 +1296,25 @@ static const char * chip_ids[ 16 ] = {
> void __iomem *__ioaddr = ioaddr; \
> if (__len >= 2 && (unsigned long)__ptr & 2) { \
> __len -= 2; \
> - SMC_outw(*(u16 *)__ptr, ioaddr, DATA_REG); \
> + SMC_outw(*(u16 *)__ptr, ioaddr, \
> + DATA_REG(lp)); \
> __ptr += 2; \
> } \
> if (SMC_CAN_USE_DATACS && lp->datacs) \
> __ioaddr = lp->datacs; \
> - SMC_outsl(__ioaddr, DATA_REG, __ptr, __len>>2); \
> + SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
> if (__len & 2) { \
> __ptr += (__len & ~3); \
> - SMC_outw(*((u16 *)__ptr), ioaddr, DATA_REG); \
> + SMC_outw(*((u16 *)__ptr), ioaddr, \
> + DATA_REG(lp)); \
> } \
> } else if (SMC_CAN_USE_16BIT) \
> - SMC_outsw(ioaddr, DATA_REG, p, (l) >> 1); \
> + SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
> else if (SMC_CAN_USE_8BIT) \
> - SMC_outsb(ioaddr, DATA_REG, p, l); \
> + SMC_outsb(ioaddr, DATA_REG(lp), p, l); \
> } while (0)
>
> -#define SMC_PULL_DATA(p, l) \
> +#define SMC_PULL_DATA(lp, p, l) \
> do { \
> if (SMC_CAN_USE_32BIT) { \
> void *__ptr = (p); \
> @@ -1333,16 +1336,17 @@ static const char * chip_ids[ 16 ] = {
> */ \
> __ptr -= 2; \
> __len += 2; \
> - SMC_SET_PTR(2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
> + SMC_SET_PTR(lp, \
> + 2|PTR_READ|PTR_RCV|PTR_AUTOINC); \
> } \
> if (SMC_CAN_USE_DATACS && lp->datacs) \
> __ioaddr = lp->datacs; \
> __len += 2; \
> - SMC_insl(__ioaddr, DATA_REG, __ptr, __len>>2); \
> + SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
> } else if (SMC_CAN_USE_16BIT) \
> - SMC_insw(ioaddr, DATA_REG, p, (l) >> 1); \
> + SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
> else if (SMC_CAN_USE_8BIT) \
> - SMC_insb(ioaddr, DATA_REG, p, l); \
> + SMC_insb(ioaddr, DATA_REG(lp), p, l); \
> } while (0)
>
> #endif /* _SMC91X_H_ */
>
Nicolas
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists