Commit b8c4da2a authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.43pre8

parent 6cc120a8
...@@ -56,7 +56,15 @@ CONFIG_PCI_BIOS=y ...@@ -56,7 +56,15 @@ CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y CONFIG_PCI_DIRECT=y
CONFIG_PCI_NAMES=y CONFIG_PCI_NAMES=y
# CONFIG_MCA is not set # CONFIG_MCA is not set
# CONFIG_HOTPLUG is not set CONFIG_HOTPLUG=y
#
# PCMCIA/CardBus support
#
CONFIG_PCMCIA=y
CONFIG_CARDBUS=y
# CONFIG_I82365 is not set
CONFIG_TCIC=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
...@@ -301,6 +309,28 @@ CONFIG_EEXPRESS_PRO100=y ...@@ -301,6 +309,28 @@ CONFIG_EEXPRESS_PRO100=y
# #
# CONFIG_WAN is not set # CONFIG_WAN is not set
#
# PCMCIA network device support
#
CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_FMVJ18X is not set
CONFIG_PCMCIA_PCNET=y
# CONFIG_PCMCIA_NMCLAN is not set
# CONFIG_PCMCIA_SMC91C92 is not set
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_AIRONET4500_CS is not set
# CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_PCMCIA_3C575 is not set
# CONFIG_PCMCIA_TULIP is not set
# CONFIG_PCMCIA_EPIC100 is not set
CONFIG_NET_PCMCIA_RADIO=y
CONFIG_PCMCIA_RAYCS=y
# CONFIG_PCMCIA_NETWAVE is not set
# CONFIG_PCMCIA_WAVELAN is not set
CONFIG_PCMCIA_NETCARD=y
# #
# Amateur Radio support # Amateur Radio support
# #
...@@ -375,6 +405,13 @@ CONFIG_PSMOUSE=y ...@@ -375,6 +405,13 @@ CONFIG_PSMOUSE=y
CONFIG_DRM=y CONFIG_DRM=y
CONFIG_DRM_TDFX=y CONFIG_DRM_TDFX=y
# CONFIG_DRM_GAMMA is not set # CONFIG_DRM_GAMMA is not set
CONFIG_PCMCIA_SERIAL=y
#
# PCMCIA character device support
#
# CONFIG_PCMCIA_SERIAL_CS is not set
# CONFIG_PCMCIA_SERIAL_CB is not set
# #
# USB support # USB support
......
...@@ -825,7 +825,7 @@ static int pcnet_event(event_t event, int priority, ...@@ -825,7 +825,7 @@ static int pcnet_event(event_t event, int priority,
if (link->state & DEV_CONFIG) { if (link->state & DEV_CONFIG) {
if (link->open) { if (link->open) {
netif_stop_queue(&info->dev); netif_stop_queue(&info->dev);
clear_bit(LINK_STATE_START, &info->dev); clear_bit(LINK_STATE_START, &info->dev.state);
} }
CardServices(ReleaseConfiguration, link->handle); CardServices(ReleaseConfiguration, link->handle);
} }
...@@ -840,7 +840,7 @@ static int pcnet_event(event_t event, int priority, ...@@ -840,7 +840,7 @@ static int pcnet_event(event_t event, int priority,
pcnet_reset_8390(&info->dev); pcnet_reset_8390(&info->dev);
NS8390_init(&info->dev, 1); NS8390_init(&info->dev, 1);
netif_start_queue(&info->dev); netif_start_queue(&info->dev);
set_bit(LINK_STATE_START, &info->dev); set_bit(LINK_STATE_START, &info->dev.state);
} }
} }
break; break;
......
...@@ -389,7 +389,7 @@ static dev_link_t *ray_attach(void) ...@@ -389,7 +389,7 @@ static dev_link_t *ray_attach(void)
dev->init = &ray_dev_init; dev->init = &ray_dev_init;
dev->open = &ray_open; dev->open = &ray_open;
dev->stop = &ray_dev_close; dev->stop = &ray_dev_close;
dev->tbusy = 1; netif_stop_queue(dev);
/* Register with Card Services */ /* Register with Card Services */
link->next = dev_list; link->next = dev_list;
...@@ -926,7 +926,8 @@ static int ray_event(event_t event, int priority, ...@@ -926,7 +926,8 @@ static int ray_event(event_t event, int priority,
switch (event) { switch (event) {
case CS_EVENT_CARD_REMOVAL: case CS_EVENT_CARD_REMOVAL:
link->state &= ~DEV_PRESENT; link->state &= ~DEV_PRESENT;
dev->tbusy = 1; dev->start = 0; netif_stop_queue(dev);
clear_bit(LINK_STATE_START, &dev->state);
if (link->state & DEV_CONFIG) { if (link->state & DEV_CONFIG) {
link->release.expires = jiffies + HZ/20; link->release.expires = jiffies + HZ/20;
add_timer(&link->release); add_timer(&link->release);
...@@ -943,8 +944,8 @@ static int ray_event(event_t event, int priority, ...@@ -943,8 +944,8 @@ static int ray_event(event_t event, int priority,
case CS_EVENT_RESET_PHYSICAL: case CS_EVENT_RESET_PHYSICAL:
if (link->state & DEV_CONFIG) { if (link->state & DEV_CONFIG) {
if (link->open) { if (link->open) {
dev->tbusy = 1; netif_stop_queue(dev);
dev->start = 0; clear_bit(LINK_STATE_START, &dev->state);
} }
pcmcia_release_configuration(link->handle); pcmcia_release_configuration(link->handle);
} }
...@@ -957,8 +958,8 @@ static int ray_event(event_t event, int priority, ...@@ -957,8 +958,8 @@ static int ray_event(event_t event, int priority,
pcmcia_request_configuration(link->handle, &link->conf); pcmcia_request_configuration(link->handle, &link->conf);
if (link->open) { if (link->open) {
ray_reset(dev); ray_reset(dev);
dev->tbusy = 0; netif_start_queue(dev);
dev->start = 1; set_bit(LINK_STATE_START, &dev->state);
} }
} }
break; break;
...@@ -1019,16 +1020,11 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1019,16 +1020,11 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
return -1; return -1;
} }
DEBUG(3,"ray_dev_start_xmit(skb=%p, dev=%p)\n",skb,dev); DEBUG(3,"ray_dev_start_xmit(skb=%p, dev=%p)\n",skb,dev);
if (dev->tbusy)
{
printk(KERN_NOTICE "ray_dev_start_xmit busy\n");
return 1;
}
if (local->authentication_state == NEED_TO_AUTH) { if (local->authentication_state == NEED_TO_AUTH) {
DEBUG(0,"ray_cs Sending authentication request.\n"); DEBUG(0,"ray_cs Sending authentication request.\n");
if (!build_auth_frame (local, local->auth_id, OPEN_AUTH_REQUEST)) { if (!build_auth_frame (local, local->auth_id, OPEN_AUTH_REQUEST)) {
local->authentication_state = AUTHENTICATED; local->authentication_state = AUTHENTICATED;
dev->tbusy = 1; netif_stop_queue(dev);
return 1; return 1;
} }
} }
...@@ -1037,7 +1033,7 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1037,7 +1033,7 @@ static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
switch (ray_hw_xmit( skb->data, length, dev, DATA_TYPE)) { switch (ray_hw_xmit( skb->data, length, dev, DATA_TYPE)) {
case XMIT_NO_CCS: case XMIT_NO_CCS:
case XMIT_NEED_AUTH: case XMIT_NEED_AUTH:
dev->tbusy = 1; netif_stop_queue(dev);
return 1; return 1;
case XMIT_NO_INTR: case XMIT_NO_INTR:
case XMIT_MSG_BAD: case XMIT_MSG_BAD:
...@@ -1072,7 +1068,7 @@ static int ray_hw_xmit(unsigned char* data, int len, struct net_device* dev, ...@@ -1072,7 +1068,7 @@ static int ray_hw_xmit(unsigned char* data, int len, struct net_device* dev,
case ECCSFULL: case ECCSFULL:
DEBUG(2,"ray_hw_xmit No free tx ccs\n"); DEBUG(2,"ray_hw_xmit No free tx ccs\n");
case ECARDGONE: case ECARDGONE:
dev->tbusy = 1; netif_stop_queue(dev);
return XMIT_NO_CCS; return XMIT_NO_CCS;
default: default:
break; break;
...@@ -1175,7 +1171,7 @@ AP to AP 1 1 dest AP src AP dest source ...@@ -1175,7 +1171,7 @@ AP to AP 1 1 dest AP src AP dest source
{ {
if (local->sparm.b4.a_acting_as_ap_status) if (local->sparm.b4.a_acting_as_ap_status)
{ {
writeb(FC2_FROM_DS, &ptx->mac.frame_ctl_2);; writeb(FC2_FROM_DS, &ptx->mac.frame_ctl_2);
memcpy_toio(ptx->mac.addr_1, ((struct ethhdr *)data)->h_dest, ADDRLEN); memcpy_toio(ptx->mac.addr_1, ((struct ethhdr *)data)->h_dest, ADDRLEN);
memcpy_toio(ptx->mac.addr_2, local->bss_id, 6); memcpy_toio(ptx->mac.addr_2, local->bss_id, 6);
memcpy_toio(ptx->mac.addr_3, ((struct ethhdr *)data)->h_source, ADDRLEN); memcpy_toio(ptx->mac.addr_3, ((struct ethhdr *)data)->h_source, ADDRLEN);
...@@ -1512,10 +1508,8 @@ static int ray_open(struct net_device *dev) ...@@ -1512,10 +1508,8 @@ static int ray_open(struct net_device *dev)
link->open++; link->open++;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
dev->interrupt = 0; if (sniffer) netif_stop_queue(dev);
if (sniffer) dev->tbusy = 1; else netif_start_queue(dev);
else dev->tbusy = 0;
dev->start = 1;
DEBUG(2,"ray_open ending\n"); DEBUG(2,"ray_open ending\n");
return 0; return 0;
...@@ -1532,7 +1526,8 @@ static int ray_dev_close(struct net_device *dev) ...@@ -1532,7 +1526,8 @@ static int ray_dev_close(struct net_device *dev)
if (link == NULL) if (link == NULL)
return -ENODEV; return -ENODEV;
link->open--; dev->start = 0; link->open--;
netif_stop_queue(dev);
if (link->state & DEV_STALE_CONFIG) { if (link->state & DEV_STALE_CONFIG) {
link->release.expires = jiffies + HZ/20; link->release.expires = jiffies + HZ/20;
link->state |= DEV_RELEASE_PENDING; link->state |= DEV_RELEASE_PENDING;
...@@ -1848,11 +1843,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1848,11 +1843,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev); DEBUG(4,"ray_cs: interrupt for *dev=%p\n",dev);
if (test_and_set_bit(0,&dev->interrupt)) {
printk("ray_cs Reentering interrupt handler not allowed\n");
return;
}
local = (ray_dev_t *)dev->priv; local = (ray_dev_t *)dev->priv;
link = (dev_link_t *)local->finder; link = (dev_link_t *)local->finder;
if ( ! (link->state & DEV_PRESENT) || link->state & DEV_SUSPEND ) { if ( ! (link->state & DEV_PRESENT) || link->state & DEV_SUSPEND ) {
...@@ -1865,7 +1855,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1865,7 +1855,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
{ {
DEBUG(1,"ray_cs interrupt bad rcsindex = 0x%x\n",rcsindex); DEBUG(1,"ray_cs interrupt bad rcsindex = 0x%x\n",rcsindex);
clear_interrupt(local); clear_interrupt(local);
dev->interrupt = 0;
return; return;
} }
if (rcsindex < NUMBER_OF_CCS) /* If it's a returned CCS */ if (rcsindex < NUMBER_OF_CCS) /* If it's a returned CCS */
...@@ -1961,8 +1950,8 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1961,8 +1950,8 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
else { else {
DEBUG(1,"ray_cs interrupt tx request failed\n"); DEBUG(1,"ray_cs interrupt tx request failed\n");
} }
if (!sniffer) dev->tbusy = 0; if (!sniffer) netif_start_queue(dev);
mark_bh(NET_BH); netif_wake_queue(dev);
break; break;
case CCS_TEST_MEMORY: case CCS_TEST_MEMORY:
DEBUG(1,"ray_cs interrupt mem test done\n"); DEBUG(1,"ray_cs interrupt mem test done\n");
...@@ -1996,7 +1985,7 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1996,7 +1985,7 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
local->card_status = CARD_ACQ_COMPLETE; local->card_status = CARD_ACQ_COMPLETE;
/* do we need to clear tx buffers CCS's? */ /* do we need to clear tx buffers CCS's? */
if (local->sparm.b4.a_network_type == ADHOC) { if (local->sparm.b4.a_network_type == ADHOC) {
if (!sniffer) dev->tbusy = 0; if (!sniffer) netif_start_queue(dev);
} }
else { else {
memcpy_fromio(&local->bss_id, prcs->var.rejoin_net_complete.bssid, ADDRLEN); memcpy_fromio(&local->bss_id, prcs->var.rejoin_net_complete.bssid, ADDRLEN);
...@@ -2008,7 +1997,7 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -2008,7 +1997,7 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
break; break;
case ROAMING_INITIATED: case ROAMING_INITIATED:
DEBUG(1,"ray_cs interrupt roaming initiated\n"); DEBUG(1,"ray_cs interrupt roaming initiated\n");
dev->tbusy = 1; netif_stop_queue(dev);
local->card_status = CARD_DOING_ACQ; local->card_status = CARD_DOING_ACQ;
break; break;
case JAPAN_CALL_SIGN_RXD: case JAPAN_CALL_SIGN_RXD:
...@@ -2022,7 +2011,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -2022,7 +2011,6 @@ static void ray_interrupt(int irq, void *dev_id, struct pt_regs * regs)
writeb(CCS_BUFFER_FREE, &prcs->buffer_status); writeb(CCS_BUFFER_FREE, &prcs->buffer_status);
} }
clear_interrupt(local); clear_interrupt(local);
dev->interrupt = 0;
} /* ray_interrupt */ } /* ray_interrupt */
/*===========================================================================*/ /*===========================================================================*/
static void ray_rx(struct net_device *dev, ray_dev_t *local, struct rcs *prcs) static void ray_rx(struct net_device *dev, ray_dev_t *local, struct rcs *prcs)
...@@ -2477,7 +2465,7 @@ static void associate(ray_dev_t *local) ...@@ -2477,7 +2465,7 @@ static void associate(ray_dev_t *local)
local->card_status = CARD_ASSOC_FAILED; local->card_status = CARD_ASSOC_FAILED;
return; return;
} }
if (!sniffer) dev->tbusy = 0; if (!sniffer) netif_start_queue(dev);
} /* end associate */ } /* end associate */
/*===========================================================================*/ /*===========================================================================*/
......
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