From: Russell King <rmk+lkml@arm.linux.org.uk>
To: Linux Kernel List <linux-kernel@vger.kernel.org>
Subject: [PATCH] Serial updates
Date: Fri, 16 Jan 2004 22:52:17 +0000 [thread overview]
Message-ID: <20040116225217.D5904@flint.arm.linux.org.uk> (raw)
Hi all,
The following patch updates the 2.6.1 serial code for changes by Bjorn
Helgaas. I've included Bjorn's comments below:
[SERIAL] make ACPI serial module unload work
Patch from Bjorn Helgaas
This patch makes ACPI serial ports work right when the serial driver
is built as a module. Previously, loading worked fine, but we
didn't clean up on module removal.
[SERIAL] make HCDP dependent on serial console
Patch from Bjorn Helgaas
I propose the following HCDP Kconfig patch. It makes HCDP
selectable only when serial console has been selected. One
desirable side effect is that both are then available only
when statically compiled in (i.e., not built as a module).
The HCDP support doesn't actually depend on IA64, but I left
that in for now because nobody else implements support for it
and I don't want people confused by a selectable option that
doesn't do anything. Maybe a "depends on EFI" or something
will be useful eventually.
[SERIAL] request resources for ACPI & HCDP ports
Patch from: Bjorn Helgaas
This patch against 2.6.1-rc3 sets UPF_RESOURCES so the
appropriate ranges will show up in /proc/ioports and /proc/iomem.
diff -Nru a/drivers/serial/8250_acpi.c b/drivers/serial/8250_acpi.c
--- a/drivers/serial/8250_acpi.c Fri Jan 16 22:06:23 2004
+++ b/drivers/serial/8250_acpi.c Fri Jan 16 22:06:23 2004
@@ -1,6 +1,7 @@
/*
- * serial/acpi.c
* Copyright (c) 2002-2003 Matthew Wilcox for Hewlett-Packard
+ * Copyright (C) 2004 Hewlett-Packard Co
+ * Bjorn Helgaas <bjorn.helgaas@hp.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -11,13 +12,21 @@
#include <linux/acpi.h>
#include <linux/init.h>
#include <linux/module.h>
+#include <linux/tty.h>
#include <linux/serial.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
#include <acpi/acpi_bus.h>
#include <asm/io.h>
#include <asm/serial.h>
+struct serial_private {
+ int line;
+ void *iomem_base;
+};
+
static acpi_status acpi_serial_mmio(struct serial_struct *req,
struct acpi_resource_address64 *addr)
{
@@ -94,38 +103,72 @@
static int acpi_serial_add(struct acpi_device *device)
{
+ struct serial_private *priv;
acpi_status status;
struct serial_struct serial_req;
- int line;
+ int result;
memset(&serial_req, 0, sizeof(serial_req));
+ priv = kmalloc(sizeof(struct serial_private), GFP_KERNEL);
+ if (!priv) {
+ result = -ENOMEM;
+ goto fail;
+ }
+ memset(priv, 0, sizeof(*priv));
+
status = acpi_walk_resources(device->handle, METHOD_NAME__CRS,
acpi_serial_resource, &serial_req);
- if (ACPI_FAILURE(status))
- return -ENODEV;
+ if (ACPI_FAILURE(status)) {
+ result = -ENODEV;
+ goto fail;
+ }
- if (!serial_req.iomem_base && !serial_req.port) {
+ if (serial_req.iomem_base)
+ priv->iomem_base = serial_req.iomem_base;
+ else if (!serial_req.port) {
printk(KERN_ERR "%s: no iomem or port address in %s _CRS\n",
__FUNCTION__, device->pnp.bus_id);
- return -ENODEV;
+ result = -ENODEV;
+ goto fail;
}
serial_req.baud_base = BASE_BAUD;
- serial_req.flags = ASYNC_SKIP_TEST|ASYNC_BOOT_AUTOCONF|ASYNC_AUTO_IRQ;
+ serial_req.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF |
+ UPF_AUTO_IRQ | UPF_RESOURCES;
- line = register_serial(&serial_req);
- if (line < 0) {
- printk(KERN_WARNING "Couldn't register serial port %s: %d",
- device->pnp.bus_id, line);
- return -ENODEV;
+ priv->line = register_serial(&serial_req);
+ if (priv->line < 0) {
+ printk(KERN_WARNING "Couldn't register serial port %s: %d\n",
+ device->pnp.bus_id, priv->line);
+ result = -ENODEV;
+ goto fail;
}
+ acpi_driver_data(device) = priv;
return 0;
+
+fail:
+ if (serial_req.iomem_base)
+ iounmap(serial_req.iomem_base);
+ kfree(priv);
+
+ return result;
}
static int acpi_serial_remove(struct acpi_device *device, int type)
{
+ struct serial_private *priv;
+
+ if (!device || !acpi_driver_data(device))
+ return -EINVAL;
+
+ priv = acpi_driver_data(device);
+ unregister_serial(priv->line);
+ if (priv->iomem_base)
+ iounmap(priv->iomem_base);
+ kfree(priv);
+
return 0;
}
diff -Nru a/drivers/serial/8250_hcdp.c b/drivers/serial/8250_hcdp.c
--- a/drivers/serial/8250_hcdp.c Fri Jan 16 22:06:23 2004
+++ b/drivers/serial/8250_hcdp.c Fri Jan 16 22:06:23 2004
@@ -185,7 +185,7 @@
#else
port.irq = gsi;
#endif
- port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
+ port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_RESOURCES;
if (gsi)
port.flags |= ASYNC_AUTO_IRQ;
diff -Nru a/drivers/serial/Kconfig b/drivers/serial/Kconfig
--- a/drivers/serial/Kconfig Fri Jan 16 22:06:23 2004
+++ b/drivers/serial/Kconfig Fri Jan 16 22:06:23 2004
@@ -62,6 +62,15 @@
If unsure, say N.
+config SERIAL_8250_HCDP
+ bool "Console device discovery via EFI HCDP table"
+ depends on IA64
+ depends on SERIAL_8250_CONSOLE=y
+ ---help---
+ If you wish to make the serial console port described by the EFI
+ HCDP table available for use as serial console, say Y here. See
+ <http://www.dig64.org/specifications/DIG64_HCDPv10a_01.pdf>.
+
config SERIAL_8250_CS
tristate "8250/16550 PCMCIA device support"
depends on PCMCIA && SERIAL_8250
@@ -83,15 +92,6 @@
---help---
If you wish to enable serial port discovery via the ACPI
namespace, say Y here. If unsure, say N.
-
-config SERIAL_8250_HCDP
- bool "8250/16550 device discovery support via EFI HCDP table"
- depends on IA64 && SERIAL_8250
- ---help---
- If you wish to make the serial console port described by the EFI
- HCDP table available for use as serial console or general
- purpose port, say Y here. See
- <http://www.dig64.org/specifications/DIG64_HCDPv10a_01.pdf>.
config SERIAL_8250_NR_UARTS
int "Maximum number of non-legacy 8250/16550 serial ports"
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
next reply other threads:[~2004-01-16 22:52 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-16 22:52 Russell King [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-10-31 17:51 [PATCH] Serial updates Russell King
2004-10-31 22:26 ` Andreas Jellinghaus
2004-11-02 4:09 ` Benjamin Herrenschmidt
2004-11-02 4:20 ` Benjamin Herrenschmidt
2004-11-02 22:43 ` Russell King
2004-11-02 23:01 ` Andrew Morton
2004-11-02 23:17 ` Russell King
2004-11-04 21:22 ` Tony Lindgren
2004-11-02 20:06 ` Alex Williamson
2004-08-30 23:21 Russell King
2004-01-03 23:45 Russell King
2003-09-09 18:56 Russell King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040116225217.D5904@flint.arm.linux.org.uk \
--to=rmk+lkml@arm.linux.org.uk \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox