Commit Graph
80 Commits
Author SHA1 Message Date
Dan Williams 246817fe54 serial: fix possible segfault handing port-full signals
The argument passed to the handler is a GByteArray, not a
GString.  Encountered with Option iCON Icera-based devices,
but could also be possible with Sierra devices.
2010-05-05 15:49:33 -07:00
Dan Williams a4c094c340 core: fix serial error #defines
Should have ERROR in them.
2010-04-24 23:44:35 -07:00
Dan Williams b9bb12a01e core: flash failure on disconnect shouldn't be a hard error (rh #578280) 2010-04-24 23:40:24 -07:00
Dan Williams df08f6a43f core: find the existing modem for a port in the manager 2010-03-30 15:03:35 -07:00
Dan Williams 720e38aec0 core: move physical device checking into the manager
It turns out that the manager needs to know about the physical
device so we can prevent multiple plugins from claiming ports on
the same modem.
2010-03-30 14:50:40 -07:00
Dan Williams 0b9c173fe9 core: assume +CPIN "READY" response indicates GSM capability (rh #573510)
Assume (for now) that devices that respond to AT+CPIN without an
error are GSM devices.  This may not be 100% true as some devices
in Asia (where CDMA devices use RUIMs which are basically SIMs) support
+CPIN for unlocking the RUIM, but since CDMA devices more consistently
implement AT+GCAP and ATI than we should be safe for a while.
2010-03-23 14:37:01 -07:00
Dan Williams bcfb75d88d core: grab probed QCDM ports for plugins where they are useful 2010-03-23 01:36:00 -07:00
Dan Williams 6598d2ef7f core: parse the right thing on QCDM version info response 2010-03-21 17:48:19 -07:00
Dan Williams 2e62a2e0a6 core: probe ports for QCDM capability too 2010-03-20 03:39:10 -07:00
Dan Williams b002e54cf4 core: immediately reject Sierra CnS ports during probe
For now; until Sierra releases their CnS documentation.
2010-03-16 13:03:13 -07:00
Dan Williams 4d1e00c496 core: fix merge damage 2010-03-11 16:02:12 -08:00
Dan Williams 3ec7e89f11 Merge remote branch 'origin/master' into qcdm 2010-03-11 13:43:06 -08:00
Dan Williams 749f9c0eb5 core: stop probing known-unusable ports early
Some ports we know we shouldn't use when we get certain responses
from them.  Reading from these ports triggers kernel bugs (at least
on 2.6.31 and 2.6.32) relating to flow control in some drivers
(*cough* hso *cough*), so lets try not to aggravate the kernel too
much.  This happens on Icera-based Option devices like the GI0322
(AT&T Quicksilver) for example.

(note: AFAICT this doesn't have any relation to the recent XON/XOFF
patch, since I get this problem without the XON/XOFF patch on both
2.6.31 and 2.6.32 as well)

---

BUG: sleeping function called from invalid context at kernel/mutex.c:94
in_atomic(): 1, irqs_disabled(): 1, pid: 9295, name: modem-manager
Pid: 9295, comm: modem-manager Not tainted 2.6.32.9-67.fc12.x86_64 #1
Call Trace:
 <IRQ>  [<ffffffff81045d41>] __might_sleep+0xed/0xef
 [<ffffffff81454dd0>] mutex_lock+0x24/0x50
 [<ffffffff8104811e>] ? enqueue_task_fair+0x2a/0x6d
 [<ffffffff812af79f>] tty_throttle+0x1b/0x49
 [<ffffffff812af0d9>] n_tty_receive_buf+0xdbb/0xe12
 [<ffffffff810459fd>] ? task_rq_unlock+0x11/0x13
 [<ffffffff81050c5c>] ? try_to_wake_up+0x2f3/0x305
 [<ffffffff8110de0c>] ? __kmalloc+0x37/0x15e
 [<ffffffff8110de42>] ? __kmalloc+0x6d/0x15e
 [<ffffffff812b12c9>] flush_to_ldisc+0xf8/0x18d
 [<ffffffff812b13ae>] tty_flip_buffer_push+0x50/0x61
 [<ffffffffa040ccd5>] put_rxbuf_data+0xea/0x124 [hso]
 [<ffffffffa040cd97>] put_rxbuf_data_and_resubmit_bulk_urb+0x21/0x6b [hso]
 [<ffffffffa040d0b1>] hso_std_serial_read_bulk_callback+0x14d/0x15f [hso]
 [<ffffffff8132edf7>] ? dma_unmap_single_attrs.clone.0+0x38/0x3a
 [<ffffffff8132ef74>] usb_hcd_giveback_urb+0x91/0xc5
 [<ffffffff813417c8>] ehci_urb_done+0x7b/0x90
 [<ffffffff81050c5c>] ? try_to_wake_up+0x2f3/0x305
 [<ffffffff81341b45>] qh_completions+0x368/0x4b9
 [<ffffffff8103e7a0>] ? __wake_up_common+0x4e/0x84
 [<ffffffff81343f70>] ehci_work+0x95/0x732
 [<ffffffff81045b53>] ? __wake_up+0x44/0x4d
 [<ffffffff81070490>] ? insert_work+0x8e/0x9b
 [<ffffffff81345f01>] ehci_irq+0x2be/0x420
 [<ffffffff8107071a>] ? __queue_work+0x3a/0x41
 [<ffffffff81049e43>] ? resched_cpu+0x6e/0x77
 [<ffffffff8107075d>] ? delayed_work_timer_fn+0x3c/0x3e
 [<ffffffff810b0e44>] ? __rcu_process_callbacks+0x7d/0x28a
 [<ffffffff8132e846>] usb_hcd_irq+0x3f/0x7b
 [<ffffffff810acd61>] handle_IRQ_event+0x60/0x121
 [<ffffffff810aeb8e>] handle_fasteoi_irq+0x8b/0xc7
 [<ffffffff81014625>] handle_irq+0x8b/0x96
 [<ffffffff81459c14>] do_IRQ+0x5c/0xbc
 [<ffffffff81012693>] ret_from_intr+0x0/0x11
2010-03-11 13:20:43 -08:00
Dan Williams a8c7bba19e serial: refactor MMSerialPort into a base class and an AT-capable serial port
For QCDM devices we want most of what MMSerialPort does, but not
the AT command handling stuff since the commands and responses
aren't AT commands nor are they even strings.  So convert everything
that MMSerialPort does into a GByteArray, and let MMAtSerialPort
handle the conversion to strings when necessary.
2010-02-20 14:55:10 -08:00
Dan Williams b1992f903b probe: add note about Onda MT503HS (rh #551376) 2010-01-18 23:22:02 -08:00
Dan Williams 0cc9c1731c probe: add CPIN request during the probing process (bgo #604369)
Some devices (ZTE MF628) respond to everything except CPIN? with
ERROR unless the PIN has been sent.  Since no known CDMA devices
support AT+CPIN, assume that devices that return a CPIN response
are GSM devices.
2010-01-17 17:37:41 -08:00
Dan Williams 8d42094608 zte: handle unsolicited messages during probe
This implements the same fixes that NetworkManager's 0.7 branch
implemented in commits f38ad328acfdc6ce29dd1380602c546b064161ae and
1235f71b20c92cded4abd976ccc5010649aae1a0.  Many ZTE devices will
spam the port with messages about waiting voicemail/SMS which buffer
up and cause the device to eventually crash if not suppressed.
2009-12-16 15:26:05 -08:00
Dan Williams aea0be5b9a nozomi: fix detection (lp:425312)
Nozomi devices aren't quite ready when the ports show up, so
we have to keep trying to open the port for a few seconds and
eventually it'll succeed.  Should really be fixed in the driver
(ie, don't create the ttys until they can actually be used) but
whatever.
2009-11-26 13:54:47 -08:00
Dan Williams 3193e97bb8 probe: fix probing on PPC due to missing cast
gcc will interpret the constant value as a uint32 but
the port's set_property() was taking it as a uint64.  Thus
the top 32 bits were probably garbage, and messed up
on big-endian architectures leading to random large
probe delays.
2009-11-17 14:16:24 -08:00
Dan Williams ed059286c5 bluetooth: physical device is a bit higher up the tree 2009-10-02 23:32:57 -07:00
Dan Williams e5441115a2 bluetooth: recognize rfcomm devices
Two hacks here:
1) rfcomm ports don't have an easily accessible driver name, so we just
match the parent's subsystem to 'bluetooth' and use that

2) libgudev doesn't seem be be able to get the rfcomm device's device file,
which would normally be /dev/rfcommX.  Oh well, we don't use the device file
yet anyway
2009-10-02 22:31:16 -07:00
Dan Williams 14e5c52f78 core: don't allow concurrent flashes on the same device
Previously, a few operations (like disable) could trigger a modem
flash in parallel with another flash.  That's wrong, don't allow
that.  At the same time, add in finer-grained error checking on
serial port speed operations, and fix a GSM generic bug that would
send the POWER_UP string on disable.
2009-09-08 17:34:04 -07:00
Bryan Duff 8a6cbdfb88 core: fix uninitialized variable 2009-08-26 11:28:14 -05:00
Dan Williams 78633192d2 plugin-base: better Huawei detection; don't drop BUSlink response 2009-06-29 22:49:19 -04:00
Dan Williams b38c3160ae plugin-base: don't scribble on memory when looking up cached capabilities 2009-06-29 16:53:23 -04:00
Dan Williams 853af00142 plugin-base: fix finding the physical device again
Don't mis-use udev's ID_BUS key.
2009-06-29 14:24:43 -04:00
Dan Williams fe7acaf457 plugin-base: better detection of physical device 2009-06-29 10:08:56 -04:00
Dan Williams 6077763d90 asynchronous and deferred port detection
Allow plugins to perform asynchronous port detection, and to defer port detection
until later.  This moves the prober bits into MMPluginBase so that all plugins
can take adavantage of it only when needed; the probing is not done at udev time.
Furthermore, plugins like Novatel can flip the secondary ports over the AT mode
through	deferred detection, by deferring the secondary ports until the main port
has been detected and AT$NWDMAT	has been sent.

This commit also finishes the port of the rest of the plugins (except mbm) over
to the new port detection methods and plugin API.
2009-06-28 14:05:05 -04:00
Dan Williams 05ab7b2a7c plugins: implement mm_plugin_base_get_device_ids()
We'll need it in more than one place, so make it generic.
2009-06-20 18:18:08 -04:00
Dan Williams 88bdb5d29a plugin: add a base class to handle modem tracking 2009-06-19 11:55:31 -04:00