Commit 105adfc6 authored by 's avatar Committed by Jeff Garzik

Automatic merge of /spare/repo/netdev-2.6 branch viro

parents 7f6a57a9 99417769
...@@ -68,6 +68,7 @@ struct etherh_priv { ...@@ -68,6 +68,7 @@ struct etherh_priv {
void __iomem *dma_base; void __iomem *dma_base;
unsigned int id; unsigned int id;
void __iomem *ctrl_port; void __iomem *ctrl_port;
void __iomem *base;
unsigned char ctrl; unsigned char ctrl;
u32 supported; u32 supported;
}; };
...@@ -177,7 +178,7 @@ etherh_setif(struct net_device *dev) ...@@ -177,7 +178,7 @@ etherh_setif(struct net_device *dev)
switch (etherh_priv(dev)->id) { switch (etherh_priv(dev)->id) {
case PROD_I3_ETHERLAN600: case PROD_I3_ETHERLAN600:
case PROD_I3_ETHERLAN600A: case PROD_I3_ETHERLAN600A:
addr = (void *)dev->base_addr + EN0_RCNTHI; addr = etherh_priv(dev)->base + EN0_RCNTHI;
switch (dev->if_port) { switch (dev->if_port) {
case IF_PORT_10BASE2: case IF_PORT_10BASE2:
...@@ -218,7 +219,7 @@ etherh_getifstat(struct net_device *dev) ...@@ -218,7 +219,7 @@ etherh_getifstat(struct net_device *dev)
switch (etherh_priv(dev)->id) { switch (etherh_priv(dev)->id) {
case PROD_I3_ETHERLAN600: case PROD_I3_ETHERLAN600:
case PROD_I3_ETHERLAN600A: case PROD_I3_ETHERLAN600A:
addr = (void *)dev->base_addr + EN0_RCNTHI; addr = etherh_priv(dev)->base + EN0_RCNTHI;
switch (dev->if_port) { switch (dev->if_port) {
case IF_PORT_10BASE2: case IF_PORT_10BASE2:
stat = 1; stat = 1;
...@@ -281,7 +282,7 @@ static void ...@@ -281,7 +282,7 @@ static void
etherh_reset(struct net_device *dev) etherh_reset(struct net_device *dev)
{ {
struct ei_device *ei_local = netdev_priv(dev); struct ei_device *ei_local = netdev_priv(dev);
void __iomem *addr = (void *)dev->base_addr; void __iomem *addr = etherh_priv(dev)->base;
writeb(E8390_NODMA+E8390_PAGE0+E8390_STOP, addr); writeb(E8390_NODMA+E8390_PAGE0+E8390_STOP, addr);
...@@ -327,7 +328,7 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf ...@@ -327,7 +328,7 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf
ei_local->dmaing = 1; ei_local->dmaing = 1;
addr = (void *)dev->base_addr; addr = etherh_priv(dev)->base;
dma_base = etherh_priv(dev)->dma_base; dma_base = etherh_priv(dev)->dma_base;
count = (count + 1) & ~1; count = (count + 1) & ~1;
...@@ -387,7 +388,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int ...@@ -387,7 +388,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int
ei_local->dmaing = 1; ei_local->dmaing = 1;
addr = (void *)dev->base_addr; addr = etherh_priv(dev)->base;
dma_base = etherh_priv(dev)->dma_base; dma_base = etherh_priv(dev)->dma_base;
buf = skb->data; buf = skb->data;
...@@ -427,7 +428,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p ...@@ -427,7 +428,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p
ei_local->dmaing = 1; ei_local->dmaing = 1;
addr = (void *)dev->base_addr; addr = etherh_priv(dev)->base;
dma_base = etherh_priv(dev)->dma_base; dma_base = etherh_priv(dev)->dma_base;
writeb (E8390_NODMA | E8390_PAGE0 | E8390_START, addr + E8390_CMD); writeb (E8390_NODMA | E8390_PAGE0 | E8390_START, addr + E8390_CMD);
...@@ -696,7 +697,8 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) ...@@ -696,7 +697,8 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
eh->ctrl_port = eh->ioc_fast; eh->ctrl_port = eh->ioc_fast;
} }
dev->base_addr = (unsigned long)eh->memc + data->ns8390_offset; eh->base = eh->memc + data->ns8390_offset;
dev->base_addr = (unsigned long)eh->base;
eh->dma_base = eh->memc + data->dataport_offset; eh->dma_base = eh->memc + data->dataport_offset;
eh->ctrl_port += data->ctrlport_offset; eh->ctrl_port += data->ctrlport_offset;
......
...@@ -1537,20 +1537,20 @@ static void shmem_get_8390_hdr(struct net_device *dev, ...@@ -1537,20 +1537,20 @@ static void shmem_get_8390_hdr(struct net_device *dev,
static void shmem_block_input(struct net_device *dev, int count, static void shmem_block_input(struct net_device *dev, int count,
struct sk_buff *skb, int ring_offset) struct sk_buff *skb, int ring_offset)
{ {
void __iomem *xfer_start = ei_status.mem + (TX_PAGES<<8) void __iomem *base = ei_status.mem;
+ ring_offset unsigned long offset = (TX_PAGES<<8) + ring_offset
- (ei_status.rx_start_page << 8); - (ei_status.rx_start_page << 8);
char *buf = skb->data; char *buf = skb->data;
if (xfer_start + count > (void __iomem *)ei_status.rmem_end) { if (offset + count > ei_status.priv) {
/* We must wrap the input move. */ /* We must wrap the input move. */
int semi_count = (void __iomem *)ei_status.rmem_end - xfer_start; int semi_count = ei_status.priv - offset;
copyin(buf, xfer_start, semi_count); copyin(buf, base + offset, semi_count);
buf += semi_count; buf += semi_count;
xfer_start = ei_status.mem + (TX_PAGES<<8); offset = TX_PAGES<<8;
count -= semi_count; count -= semi_count;
} }
copyin(buf, xfer_start, count); copyin(buf, base + offset, count);
} }
/*====================================================================*/ /*====================================================================*/
...@@ -1611,8 +1611,9 @@ static int setup_shmem_window(dev_link_t *link, int start_pg, ...@@ -1611,8 +1611,9 @@ static int setup_shmem_window(dev_link_t *link, int start_pg,
} }
ei_status.mem = info->base + offset; ei_status.mem = info->base + offset;
ei_status.priv = req.Size;
dev->mem_start = (u_long)ei_status.mem; dev->mem_start = (u_long)ei_status.mem;
dev->mem_end = ei_status.rmem_end = (u_long)info->base + req.Size; dev->mem_end = dev->mem_start + req.Size;
ei_status.tx_start_page = start_pg; ei_status.tx_start_page = start_pg;
ei_status.rx_start_page = start_pg + TX_PAGES; ei_status.rx_start_page = start_pg + TX_PAGES;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment