diff mbox

atm : fix /sys/devices/virtual/atm/X/carrier(ATM_PHY_SIG_UNKNOWN)

Message ID 201002181422.o1IEMrGo004602@thirdoffive.cmf.nrl.navy.mil
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

chas williams - CONTRACTOR Feb. 18, 2010, 2:22 p.m. UTC
In message <20100214175136.GA15891@frolo.macqel>,Philippe De Muyter writes:
>cxacru itself does the right thing : as soon as carrier state is known,
>signal is set to ATM_PHY_SIG_LOST or ATM_PHY_SIG_FOUND, but
>atm_sysfs.c::show_carrier is wrong.

so, i was thinking about something like this.  atm_dev->signal is
initializated to _LOST (because it is at this point), but most drivers
will set ->signal to _FOUND since they dont handle detecting carrier
when they finish their hardware initialization.  the usb atm layer 
is the major exception here, and it appears that they already handle
the atm_dev->signal status correctly.  the minor exception being
"unknown line state" -- i am going to assume LOST is the best choice
for this case.

please try this and let me know if it fixes your problem.


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Philippe De Muyter Feb. 21, 2010, 2:42 p.m. UTC | #1
On Thu, Feb 18, 2010 at 09:22:53AM -0500, Chas Williams (CONTRACTOR) wrote:
> In message <20100214175136.GA15891@frolo.macqel>,Philippe De Muyter writes:
> >cxacru itself does the right thing : as soon as carrier state is known,
> >signal is set to ATM_PHY_SIG_LOST or ATM_PHY_SIG_FOUND, but
> >atm_sysfs.c::show_carrier is wrong.
> 
> so, i was thinking about something like this.  atm_dev->signal is
> initializated to _LOST (because it is at this point), but most drivers
> will set ->signal to _FOUND since they dont handle detecting carrier
> when they finish their hardware initialization.  the usb atm layer 
> is the major exception here, and it appears that they already handle
> the atm_dev->signal status correctly.  the minor exception being
> "unknown line state" -- i am going to assume LOST is the best choice
> for this case.
> 
> please try this and let me know if it fixes your problem.

I have tested with my cxacru modem and it fixes my problem.
I have no other atm modem, but your change seems obviously correct.

> 
> diff --git a/drivers/atm/adummy.c b/drivers/atm/adummy.c
> index 5effec6..2b9315f 100644

Acked-by: Philippe De Muyter <phdm@macqel.be>

Thanks

Philippe
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Philippe De Muyter Feb. 21, 2010, 2:52 p.m. UTC | #2
Hi Chas,

Now that /sys/devices/virtual/atm/cxacru0/carrier is reliable, I can use
udev scripts to automate the connection to my provider.

Here they are :

$ cat /etc/udev/rules.d/99-atm.rules
KERNELS=="cxacru0", RUN="/usr/local/bin/atm"
KERNELS=="nas0", RUN="/usr/local/bin/nas"
$ cat /usr/local/bin/atm
#!/bin/sh
# for atm + pppoe
if [ $ACTION = "add" ]
then
	while [ "`cat /sys/devices/virtual/atm/cxacru0/carrier`" != 1 ]
	do
		sleep 1
	done
	/sbin/modprobe br2684
	/usr/sbin/br2684ctl -b -c 0 -a 0.32
	/sbin/ifconfig nas0 up
else
	/sbin/ifconfig nas0 down
	killall -9 br2684ctl
	while killall -0 br2684ctl
		do
			sleep 1
		done
	/sbin/rmmod br2684
fi
$ cat /usr/local/bin/nas
#!/bin/sh
echo `date` $ACTION $DEVPATH $SUBSYSTEM $INTERFACE >> /tmp/atm.log
if [ $ACTION = "add" ]
then
	/usr/sbin/pppd persist call pppoe nas0 user user@provider defaultroute usepeerdns
else
	/sbin/killall pppd
fi
$

This works perfectly, but /usr/local/bin/atm does busy waiting for the carrier
to appear.  Do you know if the atm subsystem provides a event to udev when
carrier becomes 1 ?

Philippe
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
chas williams - CONTRACTOR Feb. 22, 2010, 4:54 p.m. UTC | #3
In message <20100221145228.GB22165@frolo.macqel>,Philippe De Muyter writes:
>This works perfectly, but /usr/local/bin/atm does busy waiting for the carrier
>to appear.  Do you know if the atm subsystem provides a event to udev when
>carrier becomes 1 ?

pretty sure it doesnt.  if you would like to contribute a patch...
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Philippe De Muyter Feb. 22, 2010, 5:01 p.m. UTC | #4
Hi Chas,

On Mon, Feb 22, 2010 at 11:54:52AM -0500, Chas Williams (CONTRACTOR) wrote:
> In message <20100221145228.GB22165@frolo.macqel>,Philippe De Muyter writes:
> >This works perfectly, but /usr/local/bin/atm does busy waiting for the carrier
> >to appear.  Do you know if the atm subsystem provides a event to udev when
> >carrier becomes 1 ?
> 
> pretty sure it doesnt.  if you would like to contribute a patch...

Currently, I know nothing about sysfs or internals of udev.  But who knows ...

Philippe
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Philippe De Muyter Aug. 8, 2013, 8:34 a.m. UTC | #5
On Thu, Feb 18, 2010 at 09:22:53AM -0500, Chas Williams (CONTRACTOR) wrote:
> In message <20100214175136.GA15891@frolo.macqel>,Philippe De Muyter writes:
> >cxacru itself does the right thing : as soon as carrier state is known,
> >signal is set to ATM_PHY_SIG_LOST or ATM_PHY_SIG_FOUND, but
> >atm_sysfs.c::show_carrier is wrong.
> 
> so, i was thinking about something like this.  atm_dev->signal is
> initializated to _LOST (because it is at this point), but most drivers
> will set ->signal to _FOUND since they dont handle detecting carrier
> when they finish their hardware initialization.  the usb atm layer 
> is the major exception here, and it appears that they already handle
> the atm_dev->signal status correctly.  the minor exception being
> "unknown line state" -- i am going to assume LOST is the best choice
> for this case.
> 
> please try this and let me know if it fixes your problem.

I had replied on Sun, 21 Feb 2010 15:42:04 +0100

Acked-by: Philippe De Muyter <phdm@macqel.be>

Did you push that patch, or a revised version of it, to Linus ?

Best regards

Philippe
> 
> diff --git a/drivers/atm/adummy.c b/drivers/atm/adummy.c
> index 5effec6..2b9315f 100644
> --- a/drivers/atm/adummy.c
> +++ b/drivers/atm/adummy.c
> @@ -134,6 +134,7 @@ static int __init adummy_init(void)
>  	}
>  
>  	list_add(&adummy_dev->entry, &adummy_devs);
> +	atm_dev->signal = ATM_PHY_SIG_FOUND;
>  out:
>  	return err;
>  
> diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c
> index 8af2341..31e9baa 100644
> --- a/drivers/atm/ambassador.c
> +++ b/drivers/atm/ambassador.c
> @@ -2269,6 +2269,7 @@ static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_
>  	// enable host interrupts
>  	interrupts_on (dev);
>  
> +	dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
>  out:
>  	return err;
>  
> diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
> index 02ad83d..82ae3cc 100644
> --- a/drivers/atm/atmtcp.c
> +++ b/drivers/atm/atmtcp.c
> @@ -375,6 +375,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result)
>  	dev->dev_data = dev_data;
>  	PRIV(dev)->vcc = NULL;
>  	PRIV(dev)->persist = persist;
> +	dev->signal = ATM_PHY_SIG_FOUND;
>  	if (result) *result = dev;
>  	return 0;
>  }
> diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c
> index cd5049a..b6cb376 100644
> --- a/drivers/atm/firestream.c
> +++ b/drivers/atm/firestream.c
> @@ -1923,6 +1923,7 @@ static int __devinit firestream_init_one (struct pci_dev *pci_dev,
>  
>  	fs_dev->next = fs_boards;
>  	fs_boards = fs_dev;
> +	atm_dev->signal = ATM_PHY_SIG_FOUND;
>  	return 0;
>  
>   err_out_free_atm_dev:
> diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
> index f7d6eba..ad2d919 100644
> --- a/drivers/atm/fore200e.c
> +++ b/drivers/atm/fore200e.c
> @@ -2637,6 +2637,7 @@ fore200e_init(struct fore200e* fore200e)
>  
>      /* all done, board initialization is now complete */
>      fore200e->state = FORE200E_STATE_COMPLETE;
> +    fore200e->atm_dev->signal = ATM_PHY_SIG_FOUND;
>      return 0;
>  }
>  
> diff --git a/drivers/atm/he.c b/drivers/atm/he.c
> index e8c6529..ae83f9e 100644
> --- a/drivers/atm/he.c
> +++ b/drivers/atm/he.c
> @@ -1528,6 +1528,8 @@ he_start(struct atm_dev *dev)
>  		suni_init(he_dev->atm_dev);
>  	if (he_dev->atm_dev->phy && he_dev->atm_dev->phy->start)
>  		he_dev->atm_dev->phy->start(he_dev->atm_dev);
> +#else
> +	he_dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
>  #endif /* CONFIG_ATM_HE_USE_SUNI */
>  
>  	if (sdh) {
> diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c
> index 4e49021..269c01f 100644
> --- a/drivers/atm/horizon.c
> +++ b/drivers/atm/horizon.c
> @@ -2827,6 +2827,7 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_
>  	dev->housekeeping.data = (unsigned long) dev;
>  	mod_timer(&dev->housekeeping, jiffies);
>  
> +	dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
>  out:
>  	return err;
>  
> diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
> index 01f36c0..adc5eee 100644
> --- a/drivers/atm/idt77252.c
> +++ b/drivers/atm/idt77252.c
> @@ -3715,6 +3715,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
>  		err = -EIO;
>  		goto err_out_deinit_card;
>  	}
> +#else
> +	dev->signal = ATM_PHY_SIG_FOUND;
>  #endif	/* CONFIG_ATM_IDT77252_USE_SUNI */
>  
>  	card->sramsize = probe_sram(card);
> diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
> index 7fe7c32..446cc67 100644
> --- a/drivers/atm/lanai.c
> +++ b/drivers/atm/lanai.c
> @@ -2250,6 +2250,7 @@ static int __devinit lanai_dev_open(struct atm_dev *atmdev)
>  	    "board_rev=%d\n", lanai->number,
>  	    lanai->type==lanai2 ? "2" : "HB", (unsigned int) lanai->serialno,
>  	    (unsigned int) lanai->serialno, lanai->board_rev);
> +	atmdev->signal = ATM_PHY_SIG_FOUND;
>  	return 0;
>  
>      error_vcctable:
> diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c
> index 5083840..02fb6a6 100644
> --- a/drivers/atm/nicstar.c
> +++ b/drivers/atm/nicstar.c
> @@ -815,14 +815,18 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev)
>     card->atmdev->link_rate = card->max_pcr;
>     card->atmdev->phy = NULL;
>  
> -#ifdef CONFIG_ATM_NICSTAR_USE_SUNI
>     if (card->max_pcr == ATM_OC3_PCR)
> +#ifdef CONFIG_ATM_NICSTAR_USE_SUNI
>        suni_init(card->atmdev);
> +#else
> +       card->atmdev->signal = ATM_PHY_SIG_FOUND;
>  #endif /* CONFIG_ATM_NICSTAR_USE_SUNI */
>  
> -#ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
>     if (card->max_pcr == ATM_25_PCR)
> +#ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
>        idt77105_init(card->atmdev);
> +#else
> +      card->atmdev->signal = ATM_PHY_SIG_FOUND;
>  #endif /* CONFIG_ATM_NICSTAR_USE_IDT77105 */
>  
>     if (card->atmdev->phy && card->atmdev->phy->start)
> diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
> index 51eed67..0e505f5 100644
> --- a/drivers/atm/solos-pci.c
> +++ b/drivers/atm/solos-pci.c
> @@ -1245,7 +1245,7 @@ static int atm_init(struct solos_card *card)
>  		card->atmdev[i]->ci_range.vci_bits = 16;
>  		card->atmdev[i]->dev_data = card;
>  		card->atmdev[i]->phy_data = (void *)(unsigned long)i;
> -		card->atmdev[i]->signal = ATM_PHY_SIG_UNKNOWN;
> +		card->atmdev[i]->signal = ATM_PHY_SIG_LOST;
>  
>  		skb = alloc_skb(sizeof(*header), GFP_ATOMIC);
>  		if (!skb) {
> diff --git a/drivers/atm/zatm.c b/drivers/atm/zatm.c
> index 2e9635b..99712f0 100644
> --- a/drivers/atm/zatm.c
> +++ b/drivers/atm/zatm.c
> @@ -1345,6 +1345,8 @@ static int __devinit zatm_start(struct atm_dev *dev)
>  	zout(0xffffffff,IMR); /* enable interrupts */
>  	/* enable TX & RX */
>  	zout(zin(GMR) | uPD98401_GMR_SE | uPD98401_GMR_RE,GMR);
> +
> +	dev->signal = ATM_PHY_SIG_FOUND;
>  done:
>  	return error;
>  
> diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
> index 56802d2..febe1f0 100644
> --- a/drivers/usb/atm/cxacru.c
> +++ b/drivers/usb/atm/cxacru.c
> @@ -803,7 +803,7 @@ static void cxacru_poll_status(struct work_struct *work)
>  		break;
>  
>  	default:
> -		atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
> +		atm_dev->signal = ATM_PHY_SIG_LOST;
>  		atm_info(usbatm, "Unknown line state %02x\n", instance->line_status);
>  		break;
>  	}
> diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
> index 3e86240..fe19fe4 100644
> --- a/drivers/usb/atm/speedtch.c
> +++ b/drivers/usb/atm/speedtch.c
> @@ -536,7 +536,7 @@ static void speedtch_check_status(struct work_struct *work)
>  			break;
>  
>  		case 0x08:
> -			atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
> +			atm_dev->signal = ATM_PHY_SIG_LOST;
>  			atm_info(usbatm, "ADSL line is blocked?\n");
>  			break;
>  
> @@ -565,7 +565,7 @@ static void speedtch_check_status(struct work_struct *work)
>  			break;
>  
>  		default:
> -			atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
> +			atm_dev->signal = ATM_PHY_SIG_LOST;
>  			atm_info(usbatm, "unknown line state %02x\n", status);
>  			break;
>  		}
> diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c
> index fbea856..10899ec 100644
> --- a/drivers/usb/atm/usbatm.c
> +++ b/drivers/usb/atm/usbatm.c
> @@ -963,7 +963,7 @@ static int usbatm_atm_init(struct usbatm_data *instance)
>  
>  	atm_dev->ci_range.vpi_bits = ATM_CI_MAX;
>  	atm_dev->ci_range.vci_bits = ATM_CI_MAX;
> -	atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
> +	atm_dev->signal = ATM_PHY_SIG_LOST;
>  
>  	/* temp init ATM device, set to 128kbit */
>  	atm_dev->link_rate = 128 * 1000 / 424;
> diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
> index 817b237..6e3db35 100644
> --- a/include/linux/atmdev.h
> +++ b/include/linux/atmdev.h
> @@ -290,7 +290,6 @@ enum {
>  
>  
>  #define ATM_PHY_SIG_LOST    0	/* no carrier/light */
> -#define ATM_PHY_SIG_UNKNOWN 1	/* carrier/light status is unknown */
>  #define ATM_PHY_SIG_FOUND   2	/* carrier/light okay */
>  
>  #define ATM_ATMOPT_CLP	1	/* set CLP bit */
> diff --git a/net/atm/atm_sysfs.c b/net/atm/atm_sysfs.c
> index f693b78..a560857 100644
> --- a/net/atm/atm_sysfs.c
> +++ b/net/atm/atm_sysfs.c
> @@ -65,7 +65,7 @@ static ssize_t show_carrier(struct device *cdev,
>  	struct atm_dev *adev = to_atm_dev(cdev);
>  
>  	pos += sprintf(pos, "%d\n",
> -		       adev->signal == ATM_PHY_SIG_LOST ? 0 : 1);
> +		       adev->signal == ATM_PHY_SIG_FOUND);
>  
>  	return pos - buf;
>  }
> diff --git a/net/atm/resources.c b/net/atm/resources.c
> index 9008290..2d5f95f 100644
> --- a/net/atm/resources.c
> +++ b/net/atm/resources.c
> @@ -38,7 +38,7 @@ static struct atm_dev *__alloc_atm_dev(const char *type)
>  	if (!dev)
>  		return NULL;
>  	dev->type = type;
> -	dev->signal = ATM_PHY_SIG_UNKNOWN;
> +	dev->signal = ATM_PHY_SIG_LOST;
>  	dev->link_rate = ATM_OC3_PCR;
>  	spin_lock_init(&dev->lock);
>  	INIT_LIST_HEAD(&dev->local);

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/atm/adummy.c b/drivers/atm/adummy.c
index 5effec6..2b9315f 100644
--- a/drivers/atm/adummy.c
+++ b/drivers/atm/adummy.c
@@ -134,6 +134,7 @@  static int __init adummy_init(void)
 	}
 
 	list_add(&adummy_dev->entry, &adummy_devs);
+	atm_dev->signal = ATM_PHY_SIG_FOUND;
 out:
 	return err;
 
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c
index 8af2341..31e9baa 100644
--- a/drivers/atm/ambassador.c
+++ b/drivers/atm/ambassador.c
@@ -2269,6 +2269,7 @@  static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_
 	// enable host interrupts
 	interrupts_on (dev);
 
+	dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
 out:
 	return err;
 
diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
index 02ad83d..82ae3cc 100644
--- a/drivers/atm/atmtcp.c
+++ b/drivers/atm/atmtcp.c
@@ -375,6 +375,7 @@  static int atmtcp_create(int itf,int persist,struct atm_dev **result)
 	dev->dev_data = dev_data;
 	PRIV(dev)->vcc = NULL;
 	PRIV(dev)->persist = persist;
+	dev->signal = ATM_PHY_SIG_FOUND;
 	if (result) *result = dev;
 	return 0;
 }
diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c
index cd5049a..b6cb376 100644
--- a/drivers/atm/firestream.c
+++ b/drivers/atm/firestream.c
@@ -1923,6 +1923,7 @@  static int __devinit firestream_init_one (struct pci_dev *pci_dev,
 
 	fs_dev->next = fs_boards;
 	fs_boards = fs_dev;
+	atm_dev->signal = ATM_PHY_SIG_FOUND;
 	return 0;
 
  err_out_free_atm_dev:
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
index f7d6eba..ad2d919 100644
--- a/drivers/atm/fore200e.c
+++ b/drivers/atm/fore200e.c
@@ -2637,6 +2637,7 @@  fore200e_init(struct fore200e* fore200e)
 
     /* all done, board initialization is now complete */
     fore200e->state = FORE200E_STATE_COMPLETE;
+    fore200e->atm_dev->signal = ATM_PHY_SIG_FOUND;
     return 0;
 }
 
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index e8c6529..ae83f9e 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -1528,6 +1528,8 @@  he_start(struct atm_dev *dev)
 		suni_init(he_dev->atm_dev);
 	if (he_dev->atm_dev->phy && he_dev->atm_dev->phy->start)
 		he_dev->atm_dev->phy->start(he_dev->atm_dev);
+#else
+	he_dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
 #endif /* CONFIG_ATM_HE_USE_SUNI */
 
 	if (sdh) {
diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c
index 4e49021..269c01f 100644
--- a/drivers/atm/horizon.c
+++ b/drivers/atm/horizon.c
@@ -2827,6 +2827,7 @@  static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_
 	dev->housekeeping.data = (unsigned long) dev;
 	mod_timer(&dev->housekeeping, jiffies);
 
+	dev->atm_dev->signal = ATM_PHY_SIG_FOUND;
 out:
 	return err;
 
diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
index 01f36c0..adc5eee 100644
--- a/drivers/atm/idt77252.c
+++ b/drivers/atm/idt77252.c
@@ -3715,6 +3715,8 @@  idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
 		err = -EIO;
 		goto err_out_deinit_card;
 	}
+#else
+	dev->signal = ATM_PHY_SIG_FOUND;
 #endif	/* CONFIG_ATM_IDT77252_USE_SUNI */
 
 	card->sramsize = probe_sram(card);
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
index 7fe7c32..446cc67 100644
--- a/drivers/atm/lanai.c
+++ b/drivers/atm/lanai.c
@@ -2250,6 +2250,7 @@  static int __devinit lanai_dev_open(struct atm_dev *atmdev)
 	    "board_rev=%d\n", lanai->number,
 	    lanai->type==lanai2 ? "2" : "HB", (unsigned int) lanai->serialno,
 	    (unsigned int) lanai->serialno, lanai->board_rev);
+	atmdev->signal = ATM_PHY_SIG_FOUND;
 	return 0;
 
     error_vcctable:
diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c
index 5083840..02fb6a6 100644
--- a/drivers/atm/nicstar.c
+++ b/drivers/atm/nicstar.c
@@ -815,14 +815,18 @@  static int __devinit ns_init_card(int i, struct pci_dev *pcidev)
    card->atmdev->link_rate = card->max_pcr;
    card->atmdev->phy = NULL;
 
-#ifdef CONFIG_ATM_NICSTAR_USE_SUNI
    if (card->max_pcr == ATM_OC3_PCR)
+#ifdef CONFIG_ATM_NICSTAR_USE_SUNI
       suni_init(card->atmdev);
+#else
+       card->atmdev->signal = ATM_PHY_SIG_FOUND;
 #endif /* CONFIG_ATM_NICSTAR_USE_SUNI */
 
-#ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
    if (card->max_pcr == ATM_25_PCR)
+#ifdef CONFIG_ATM_NICSTAR_USE_IDT77105
       idt77105_init(card->atmdev);
+#else
+      card->atmdev->signal = ATM_PHY_SIG_FOUND;
 #endif /* CONFIG_ATM_NICSTAR_USE_IDT77105 */
 
    if (card->atmdev->phy && card->atmdev->phy->start)
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 51eed67..0e505f5 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -1245,7 +1245,7 @@  static int atm_init(struct solos_card *card)
 		card->atmdev[i]->ci_range.vci_bits = 16;
 		card->atmdev[i]->dev_data = card;
 		card->atmdev[i]->phy_data = (void *)(unsigned long)i;
-		card->atmdev[i]->signal = ATM_PHY_SIG_UNKNOWN;
+		card->atmdev[i]->signal = ATM_PHY_SIG_LOST;
 
 		skb = alloc_skb(sizeof(*header), GFP_ATOMIC);
 		if (!skb) {
diff --git a/drivers/atm/zatm.c b/drivers/atm/zatm.c
index 2e9635b..99712f0 100644
--- a/drivers/atm/zatm.c
+++ b/drivers/atm/zatm.c
@@ -1345,6 +1345,8 @@  static int __devinit zatm_start(struct atm_dev *dev)
 	zout(0xffffffff,IMR); /* enable interrupts */
 	/* enable TX & RX */
 	zout(zin(GMR) | uPD98401_GMR_SE | uPD98401_GMR_RE,GMR);
+
+	dev->signal = ATM_PHY_SIG_FOUND;
 done:
 	return error;
 
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 56802d2..febe1f0 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -803,7 +803,7 @@  static void cxacru_poll_status(struct work_struct *work)
 		break;
 
 	default:
-		atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+		atm_dev->signal = ATM_PHY_SIG_LOST;
 		atm_info(usbatm, "Unknown line state %02x\n", instance->line_status);
 		break;
 	}
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index 3e86240..fe19fe4 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -536,7 +536,7 @@  static void speedtch_check_status(struct work_struct *work)
 			break;
 
 		case 0x08:
-			atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+			atm_dev->signal = ATM_PHY_SIG_LOST;
 			atm_info(usbatm, "ADSL line is blocked?\n");
 			break;
 
@@ -565,7 +565,7 @@  static void speedtch_check_status(struct work_struct *work)
 			break;
 
 		default:
-			atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+			atm_dev->signal = ATM_PHY_SIG_LOST;
 			atm_info(usbatm, "unknown line state %02x\n", status);
 			break;
 		}
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c
index fbea856..10899ec 100644
--- a/drivers/usb/atm/usbatm.c
+++ b/drivers/usb/atm/usbatm.c
@@ -963,7 +963,7 @@  static int usbatm_atm_init(struct usbatm_data *instance)
 
 	atm_dev->ci_range.vpi_bits = ATM_CI_MAX;
 	atm_dev->ci_range.vci_bits = ATM_CI_MAX;
-	atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+	atm_dev->signal = ATM_PHY_SIG_LOST;
 
 	/* temp init ATM device, set to 128kbit */
 	atm_dev->link_rate = 128 * 1000 / 424;
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index 817b237..6e3db35 100644
--- a/include/linux/atmdev.h
+++ b/include/linux/atmdev.h
@@ -290,7 +290,6 @@  enum {
 
 
 #define ATM_PHY_SIG_LOST    0	/* no carrier/light */
-#define ATM_PHY_SIG_UNKNOWN 1	/* carrier/light status is unknown */
 #define ATM_PHY_SIG_FOUND   2	/* carrier/light okay */
 
 #define ATM_ATMOPT_CLP	1	/* set CLP bit */
diff --git a/net/atm/atm_sysfs.c b/net/atm/atm_sysfs.c
index f693b78..a560857 100644
--- a/net/atm/atm_sysfs.c
+++ b/net/atm/atm_sysfs.c
@@ -65,7 +65,7 @@  static ssize_t show_carrier(struct device *cdev,
 	struct atm_dev *adev = to_atm_dev(cdev);
 
 	pos += sprintf(pos, "%d\n",
-		       adev->signal == ATM_PHY_SIG_LOST ? 0 : 1);
+		       adev->signal == ATM_PHY_SIG_FOUND);
 
 	return pos - buf;
 }
diff --git a/net/atm/resources.c b/net/atm/resources.c
index 9008290..2d5f95f 100644
--- a/net/atm/resources.c
+++ b/net/atm/resources.c
@@ -38,7 +38,7 @@  static struct atm_dev *__alloc_atm_dev(const char *type)
 	if (!dev)
 		return NULL;
 	dev->type = type;
-	dev->signal = ATM_PHY_SIG_UNKNOWN;
+	dev->signal = ATM_PHY_SIG_LOST;
 	dev->link_rate = ATM_OC3_PCR;
 	spin_lock_init(&dev->lock);
 	INIT_LIST_HEAD(&dev->local);