summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart
Commit message (Collapse)AuthorAgeFilesLines
...
* Include the header with the register definitions from sys/dev/ic. Theymarcel2004-11-212-2/+4
| | | | are shared now.
* Include the common <dev/ic/ns16550.h> instead of the privatemarcel2004-11-201-1/+2
| | | | <dev/uart_dev_ns8250.h>. The latter can be removed now.
* Remove the whole uart_cpu_identify() stuff again. Now that it's no longermarius2004-11-178-39/+0
| | | | | | | used on sparc64 they are only stubs on all architectures and it doesn't look like if we would need it in the near future again. Ok'ed by: marcel
* o sparc64/isa/isa.c:marius2004-11-171-40/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - The claim in the commit log of rev. 1.11 of dev/uart/uart_cpu_sparc64.c etc. that UARTs are the only relevant ISA devices on sparc64 turned out to be false. While there are sparc64 models where UARTs are the only devices on the ISA bus there are in fact also low-cost models where all devices traditionally found on the EBus are hooked up to the ISA bus. There are also models that use a mix between EBus and ISA devices with things like an AT keyboard controller and other rather interesting devices that we might want to support in the futute hook up to the ISA bus. In order to not need to add sparc64 specific device_identify methods to all of the respective ISA drivers and also not add OFW specific code to the common ISA code make the sparc64 ISA bus code fake up PnP devices so most ISA drivers probe their devices without further changes. Unfortunately Sun doesn't adhere to the ISA bindings defined in IEEE 1275-1994 for the properties of most of the ISA devices which would allow to obtain the vendor and logical IDs from their properties. So we we just use a simple table which maps the name properties to PnP IDs. This could be done in a more sophisticated way but I courrently don't see the need for this. [1] - Add the children with fully mapped and specified resources (in the OFW sense) similar to what is done in the EBus code for the IRQ resources of the children as adjusting the resources and the resource list entries respectively in isa_alloc_resource() as done perviously causes trouble with drivers which use rman_get_start(), pass-through or allocate and release resources multiple times, etc. Adjusting the resources might be better off in a bus_activate_resource method but the common ISA code currently doesn't allow for an isa_activate_resource(). [2] With this change: - ppbus(4) and lpt(4) attach and work (modulo ECP mode, which requires real ISADMA code but it currently only consists of stubs on sparc64). - atkbdc(4) and atkbdc(4) attach, no further testing done. - fdc(4) itself attaches but causes a hang while attaching fd0 also when is DMA disabled, further work in fdc(4) is required here as e.g. fd0 uses the address of fd1 on sparc64 (not sure if sparc64 supports more than one floppy drive at all). All of these drivers previously caused panics in the sparc64 ISA code. - Minor changes, e.g. use __FBSDID, remove a dupe word in a comment and declare one global variable which isn't used outside of isa.c static. o dev/uart/uart_cpu_sparc64.c and modules/uart/Makefile: - Remove the code for registering the UARTs on the ISA bus from the sparc64 uart_cpu_identify() again and rely on probing them via PnP. Original idea by: tmm [1] No objections by: tmm [1], [2]
* Be slightly more paranoid about using the divisor in a division andmarcel2004-11-151-2/+6
| | | | the calculated baudrate. Neither should be 0.
* Implement UART_IOCTL_BAUD. Consequently, when the baudrate was unsetmarcel2004-11-141-1/+11
| | | | for the console, we emit the actual baudrate during bus enumeration.
* Add UART_IOCTL_BAUD to allow us to query the hardware about themarcel2004-11-142-0/+6
| | | | | | | | | current baudrate setting. Use this ioctl() when we don't know the baudrate of the sysdev (as represented by a 0 value). When the ioctl() fails, e.g. when the backend hasn't implemented it or the hardware doesn't provide the means to determine its current baudrate setting, we invalidate the baudrate setting by setting it to -1. None of the backends currently implement the new ioctl().
* Make sure the baudrate specified with the BR tag is somewhat sane.marcel2004-11-141-0/+20
| | | | | | | | A baudrate we consider insane is silently replaced with 0. When the baudrate is 0, we will not try to program the hardware. Instead we leave the communication speed unaltered, maximizing the chance to have a working console. Obviously this means we allow specifying a 0 baudrate for exactly that purpose.
* Remove asserts which are not correct if the port is a tty.phk2004-10-121-7/+1
|
* Use generic tty code instead of (comparatively little) local copies.phk2004-10-122-171/+52
|
* Use tty->t_sc to find out softc.phk2004-09-181-8/+6
|
* Use ttyalloc() instead of ttymalloc(NULL)phk2004-09-171-1/+1
|
* Don't call uart_bus_probe() for non-matching PnP-devices. Trying to probemarius2004-08-251-4/+3
| | | | | | | the keyboard controller with uart_bus_probe() caused a hang here on an i386 machine. Approved by: marcel
* Fix a style(9) bug (variable definitions inside a nested scope) a patchmarius2004-08-151-4/+2
| | | | | | | of mine introduced in revision 1.10. Approved by: marcel Prodded by: marcel
* - Introduce an uart_cpu_identify() which is implemented in uart_cpu_<arch>.cmarius2004-08-148-0/+79
| | | | | | | | | | | | | | | | | and that can be used as an identify function for all kinds of busses on a certain platform. Expect for sparc64 these are only stubs right now. [1] - For sparc64, add code to its uart_cpu_identify() for registering the on- board ISA UARTs and their resources based on information obtained from Open Firmware. It would be better if this would be done in the OFW ISA code. However, due to the common FreeBSD ISA code and PNP-IDs not always being present in the properties of the ISA nodes there seems to be no good way to implement that. Therefore special casing UARTs as the sole really relevant ISA devices on sparc64 seemed reasonable. [2] Approved by: marcel Discussed with: marcel [1], tmm [2] Tested by: make universe
* - Introduce an ofw_bus kobj-interface for retrieving the OFW node and amarius2004-08-121-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | subset ("compatible", "device_type", "model" and "name") of the standard properties in drivers for devices on Open Firmware supported busses. The standard properties "reg", "interrupts" und "address" are not covered by this interface because they are only of interest in the respective bridge code. There's a remaining standard property "status" which is unclear how to support properly but which also isn't used in FreeBSD at present. This ofw_bus kobj-interface allows to replace the various (ebus_get_node(), ofw_pci_get_node(), etc.) and partially inconsistent (central_get_type() vs. sbus_get_device_type(), etc.) existing IVAR ones with a common one. This in turn allows to simplify and remove code-duplication in drivers for devices that can hang off of more than one OFW supported bus. - Convert the sparc64 Central, EBus, FHC, PCI and SBus bus drivers and the drivers for their children to use the ofw_bus kobj-interface. The IVAR- interfaces of the Central, EBus and FHC are entirely replaced by this. The PCI bus driver used its own kobj-interface and now also uses the ofw_bus one. The IVARs special to the SBus, e.g. for retrieving the burst size, remain. Beware: this causes an ABI-breakage for modules of drivers which used the IVAR-interfaces, i.e. esp(4), hme(4), isp(4) and uart(4), which need to be recompiled. The style-inconsistencies introduced in some of the bus drivers will be fixed by tmm@ in a generic clean-up of the respective drivers later (he requested to add the changes in the "new" style). - Convert the powerpc MacIO bus driver and the drivers for its children to use the ofw_bus kobj-interface. This invloves removing the IVARs related to the "reg" property which were unused and a leftover from the NetBSD origini of the code. There's no ABI-breakage caused by this because none of these driver are currently built as modules. There are other powerpc bus drivers which can be converted to the ofw_bus kobj-interface, e.g. the PCI bus driver, which should be done together with converting powerpc to use the OFW PCI code from sparc64. - Make the SBus and FHC front-end of zs(4) and the sparc64 eeprom(4) take advantage of the ofw_bus kobj-interface and simplify them a bit. Reviewed by: grehan, tmm Approved by: re (scottl) Discussed with: tmm Tested with: Sun AX1105, AXe, Ultra 2, Ultra 60; PPC cross-build on i386
* Do not use hardware flow control for the moment. There are some issuesmarcel2004-08-061-0/+8
| | | | | | | with it that need to be understood better before they can be resolved. This takes time and time is already in short supply. Reported & tested by: glebius@
* When sizing the FIFO, don't count all the way up to 1030 if any FIFOmarcel2004-07-261-1/+1
| | | | | size larger than 128 is considered an incompatible size. Stop counting when we reach 130 in the loop.
* Preparation commit for the tty cleanups that will follow in the nearphk2004-07-151-2/+2
| | | | | | | | | future: rename ttyopen() -> tty_open() and ttyclose() -> tty_close(). We need the ttyopen() and ttyclose() for the new generic cdevsw functions for tty devices in order to have consistent naming.
* Update for the KDB framework:marcel2004-07-101-8/+6
| | | | | | o Call kdb_enter() instead of breakpoint(). o Call kdb_alt_break() instead of db_alt_break(). o Make debugging code conditional upon KDB instead of DDB.
* Add support for uart(4) being a debug port for the GDB backend.marcel2004-07-101-0/+101
|
* Define the tty methods as typedefs.phk2004-06-301-2/+1
| | | | | | Change the return type for t_break to void. Add t_ioctl (more about this later).
* Use generic support for BREAK and modem control ioctls.phk2004-06-251-65/+27
|
* Use the new serial port definitions for modemsignals.phk2004-06-246-105/+92
|
* save a few redundant lines by moving the retry loop further backwards.phk2004-06-231-7/+1
|
* Do the dreaded s/dev_t/struct cdev */phk2004-06-162-4/+4
| | | | Bump __FreeBSD_version accordingly.
* Machine generated patch which changes linedisc calls from accessingphk2004-06-041-8/+8
| | | | | | linesw[] directly to using the ttyld...() functions The ttyld...() functions ar inline so there is no performance hit.
* Make the remaining serial drivers call ttyioctl() rather than callingphk2004-06-041-5/+2
| | | | the linedisc directly.
* Add missing <sys/module.h> includes currently relying on nested includephk2004-06-031-0/+1
| | | | in <sys/kernel.h>
* Fix disordering of pccarddevs.h noticed by bde. Also remove a fewimp2004-05-271-2/+2
| | | | | | redundant includes and fix some of the include disordering. Submitted by: bde
* It seems that clearing the MCR_IE bit in the modem control registertmm2004-05-261-22/+23
| | | | | | | | | | | | | | | | | does not reliably prevent the triggering of interrupts for all supported configurations. Thus, the FIFO size probe could cause an interrupt, which could lead to an interrupt storm in the shared interrupt case. To prevent this, change ns8250_bus_probe() to use the overflow bit in the line status register instead of the RX ready bit in the interrupt identification register to detect whether the FIFO has filled up. This allows us to clear all bits in the interrupt enable register during the probe, which should prevent interrupts reliably. Additionally, the detected FIFO size may be a bit more accurate, because the overflow bit is only set when the FIFO did actually fill up, while interrupts would trigger a bit early. Reviewed and tested on a lot of hardware by: marcel
* Move to generating pccarddevs.h on the fly, both for the kernel andimp2004-05-261-1/+1
| | | | | | | the modules. Also generate usbdevs.h automatically now, but a non-kernel file is stopping that at the moment.
* - Initialize uart_bus_space_io and uart_bus_space_mem.nyan2004-05-161-7/+7
| | | | - Fix wrong comment.
* Fix hangs caused by z8530_bus_ipend() returning UART_IPEND_TXIDLEmarcel2004-05-041-1/+7
| | | | | | | | | | | | | | | | | | not as a pending interrupt status, but as a matter of status quo. Consequently, when there's no data to be transmitted the condition is not cleared and uart_intr() is stuck in an infinite loop trying to clear the UART_IPEND_TXIDLE status. The z8530_bus_ipend() function is changed to return idle only once after having sent any data. The root cause for this problem is that we cannot use the interrupt status bits of the SCC itself. The register that holds the interrupt status can only be accessed by channel A and holds the status for both channels. Using the interrupt status register would complicate the driver because we need to synchronize access to the SCC between the channels. Elementary testing: marius
* When the interrupt cannot be INTR_FAST, it still is INTR_MPSAFE.marcel2004-05-041-2/+2
| | | | Mark it as such.
* Don't mask TCD in IMR0 when we initialize the channel. Doing so makesmarcel2004-04-251-1/+1
| | | | | it impossible to check the interrupt status bit when we try to get a character in the low level console code.
* To quote submitter:marcel2004-04-041-8/+24
| | | | | | | | | | | | | | | "... uart_cpu_sparc64.c currently only looks at /options if ttyX is the selected console. However, there's one case where it should additionally look at /chosen. If "keyboard" is the selected input- device and "screen" the output-device (both via /options) but the keyboard is unplugged, OF automatically switches to ttya for the console. It even prints a line telling so on "screen". Solaris respects this behaviour and uses ttya as the console in this case and people probably expect FreeBSD to do the same (it's also very handy to temporarily switch consoles)..." Submitted by: Marius Strobl <marius@alchemy.franken.de> Has no doubt the change is correct: marcel
* In uart_ebus_probe(), match "su_pnp" besides "su" for ns8250 familymarcel2004-04-031-2/+4
| | | | | | | | of UARTs. We already did this in uart_cpu_getdev(). While here, also check the compat name for "su" or "su16550". Both changes submitted by: Marius Strobl <marius@alchemy.franken.de> Does not doubt the correctness of the second change: marcel
* In ns8250_putc() insert a barrier between writing the character andmarcel2004-04-021-0/+1
| | | | checking for transmitter empty.
* Allow the selection of a debug port with hw.uart.dbgport. Unlikemarcel2004-04-021-46/+84
| | | | | other architectures (like ia64), the variable has to be set to an OpenFirmware device name.
* Call kbd_attach() only when KBD_INSTALL_CDEV is enabled as the functionmarcel2004-04-021-0/+2
| | | | is only defined in that case.
* Fix braino in previous commit: getenv() can return NULL.marcel2004-03-201-0/+2
|
* Introduce the hw.uart.console and hw.uart.dbgport environment variablesmarcel2004-03-208-57/+304
| | | | | | | | | | | | | | | | | | | | | | | | | to select a serial console and debug port (resp). On ia64 these replace the use of hints completely and take precedence over hints on alpha, amd64 and i386. On sparc64 these variables are not yet recognised. The reasons for introducing these variables are: 1. Hints have side-effects. They reserve the unit number for use by isa or acpi devices and therefore cannot be used to select a pci device. Also, the use of a unit number to select a device prior to bus enumeration is nonsense. The new variables have no side- effects and are not based on unit numbers. 2. Hints don't have the expression power to allow the sysadmin to select UARTs that are not legacy PC devices and need the support of compile-time constants to give the sysadmin some level of flexibility. The hw.uart.console and hw.uart.dbgport variables specify a list of attributes. An attribute is a tag-value pair, seperated by a colon. Attributes are seperated by a comma. Where possible, tags are the same as those in /etc/remote (only br and pa in practice). Details can be found in the manpage (not part of this commit). Not tested on: amd64, pc98
* Convert callers to the new bus_alloc_resource_any(9) API.njl2004-03-171-2/+2
| | | | | Submitted by: Mark Santcroos <marks@ripe.net> Reviewed by: imp, dfr, bde
* Device megapatch 4/6:phk2004-02-211-1/+2
| | | | | | | | Introduce d_version field in struct cdevsw, this must always be initialized to D_VERSION. Flip sense of D_NOGIANT flag to D_NEEDGIANT, this involves removing four D_NOGIANT flags and adding 145 D_NEEDGIANT flags.
* Device megapatch 3/6:phk2004-02-211-4/+0
| | | | | | | | | | | | Add missing D_TTY flags to various drivers. Complete asserts that dev_t's passed to ttyread(), ttywrite(), ttypoll() and ttykqwrite() have (d_flags & D_TTY) and a struct tty pointer. Make ttyread(), ttywrite(), ttypoll() and ttykqwrite() the default cdevsw methods for D_TTY drivers and remove the explicit initializations in various drivers cdevsw structures.
* Use standard style for cdevsw initializtionphk2004-02-141-9/+9
|
* Test the return value of UART_PARAM(). Invalid line parameters did notmarcel2004-02-141-1/+2
| | | | | | | result in an error before. PR: kern/60284 Submitted by: Thomas Sandford <freebsduser@paradisegreen.co.uk>
* Sometimes cardbus attachments don't attach, so while we track downimp2003-11-281-0/+1
| | | | | | | | this problem put these lines back in. While they should be unnecessary, they appear to be sometimes necessary. Reviewed in concept: dfr Approved by: re (scottl@)
* Add a uart attachment/syscons keyboard driver for sun keyboards. In theoryjake2003-11-113-0/+738
| | | | | this will work with any uart backend, currently supported hardware uses either ns8250 or z8530.
OpenPOWER on IntegriCloud