From: Robert Picco <Robert.Picco@hp.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Jeff Garzik <jgarzik@pobox.com>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] HPET driver
Date: Wed, 23 Jun 2004 17:34:02 -0400 [thread overview]
Message-ID: <40D9F74A.9090508@hp.com> (raw)
In-Reply-To: <40D37090.20909@pobox.com>
Hi Andrew:
I eliminated the request_irq brain damage, eliminated procfs support,
made the check for FMODE_WRITE in hpet_open and responded to a few
other suggestions.
I misinterpreted your desire to change HPET from using a major device
number and moving to miscdevice. I thought one objective was to avoid
LANANA registration. It obviously isn't and I have done LANANA
registration but need a reply. So it's possible the values for hpet in
miscdevice.h and devices.txt will change.
thanks,
Bob
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/arch/i386/kernel/time_hpet.c
linux-2.6.7-mm1-hpet/arch/i386/kernel/time_hpet.c
--- linux-2.6.7-mm1-orig/arch/i386/kernel/time_hpet.c 2004-06-21
07:42:51.000000000 -0400
+++ linux-2.6.7-mm1-hpet/arch/i386/kernel/time_hpet.c 2004-06-21
07:51:12.000000000 -0400
@@ -155,10 +155,9 @@
hd.hd_address = hpet_virt_address;
hd.hd_nirqs = ntimer;
hd.hd_flags = HPET_DATA_PLATFORM;
-#ifndef CONFIG_HPET_EMULATE_RTC
- hd.hd_state = 0x1;
-#else
- hd.hd_state = 0x3;
+ HD_STATE(&hd, 0);
+#ifdef CONFIG_HPET_EMULATE_RTC
+ HD_STATE(&hd, 1);
#endif
hd.hd_irq[0] = HPET_LEGACY_8254;
hd.hd_irq[1] = HPET_LEGACY_RTC;
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/Documentation/devices.txt
linux-2.6.7-mm1-hpet/Documentation/devices.txt
--- linux-2.6.7-mm1-orig/Documentation/devices.txt 2004-06-16
01:19:13.000000000 -0400
+++ linux-2.6.7-mm1-hpet/Documentation/devices.txt 2004-06-21
10:03:42.000000000 -0400
@@ -434,6 +434,7 @@
225 = /dev/pps Pulse Per Second driver
226 = /dev/systrace Systrace device
227 = /dev/mcelog X86_64 Machine Check Exception driver
+ 228 = /dev/hpet HPET driver
240-254 Reserved for local use
255 Reserved for MISC_DYNAMIC_MINOR
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/Documentation/filesystems/proc.txt
linux-2.6.7-mm1-hpet/Documentation/filesystems/proc.txt
--- linux-2.6.7-mm1-orig/Documentation/filesystems/proc.txt
2004-06-21 07:42:55.000000000 -0400
+++ linux-2.6.7-mm1-hpet/Documentation/filesystems/proc.txt
2004-06-21 15:26:00.000000000 -0400
@@ -201,7 +201,7 @@
devices Available devices (block and character)
dma Used DMS channels
filesystems Supported filesystems -
driver Various drivers grouped here, currently rtc (2.4) and
hpet (2.6)
+ driver Various drivers grouped here, currently rtc (2.4)
execdomains Execdomains, related to security (2.4)
fb Frame Buffer devices (2.4)
fs File system parameters, currently nfs/exports (2.4)
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/Documentation/hpet.txt
linux-2.6.7-mm1-hpet/Documentation/hpet.txt
--- linux-2.6.7-mm1-orig/Documentation/hpet.txt 2004-06-21
07:42:55.000000000 -0400
+++ linux-2.6.7-mm1-hpet/Documentation/hpet.txt 2004-06-21
10:02:04.000000000 -0400
@@ -103,7 +103,7 @@
return;
}
- fd = open(argv[0], O_RDWR);
+ fd = open(argv[0], O_RDONLY);
if (fd < 0)
fprintf(stderr, "hpet_open_close: open failed\n");
else
@@ -136,7 +136,7 @@
freq = atoi(argv[1]);
iterations = atoi(argv[2]);
- fd = open(argv[0], O_RDWR);
+ fd = open(argv[0], O_RDONLY);
if (fd < 0) {
fprintf(stderr, "hpet_poll: open of %s failed\n", argv[0]);
@@ -230,7 +230,7 @@
goto out;
}
- fd = open(argv[0], O_RDWR);
+ fd = open(argv[0], O_RDONLY);
if (fd < 0) {
fprintf(stderr, "hpet_fasync: failed to open %s\n", argv[0]);
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/drivers/char/hpet.c
linux-2.6.7-mm1-hpet/drivers/char/hpet.c
--- linux-2.6.7-mm1-orig/drivers/char/hpet.c 2004-06-21
07:42:55.000000000 -0400
+++ linux-2.6.7-mm1-hpet/drivers/char/hpet.c 2004-06-22
12:21:36.000000000 -0400
@@ -50,6 +50,8 @@
/* A lock for concurrent intermodule access to hpet and isr hpet
activity. */
static spinlock_t hpet_task_lock = SPIN_LOCK_UNLOCKED;
+#define HPET_DEV_NAME (7)
+
struct hpet_dev {
struct hpets *hd_hpets;
struct hpet *hd_hpet;
@@ -62,6 +64,7 @@
unsigned int hd_flags;
unsigned int hd_irq;
unsigned int hd_hdwirq;
+ char hd_name[HPET_DEV_NAME];
};
struct hpets {
@@ -148,6 +151,9 @@
struct hpets *hpetp;
int i;
+ if (file->f_mode & FMODE_WRITE)
+ return -EINVAL;
+
spin_lock_irq(&hpet_lock);
for (devp = NULL, hpetp = hpets; hpetp && !devp; hpetp =
hpetp->hp_next)
@@ -191,8 +197,6 @@
add_wait_queue(&devp->hd_waitqueue, &wait);
do {
- __set_current_state(TASK_INTERRUPTIBLE);
-
spin_lock_irq(&hpet_lock);
data = devp->hd_irqdata;
devp->hd_irqdata = 0;
@@ -208,6 +212,7 @@
goto out;
}
+ set_current_state(TASK_INTERRUPTIBLE);
schedule();
} while (1);
@@ -255,9 +260,6 @@
if (((vma->vm_end - vma->vm_start) != PAGE_SIZE) || vma->vm_pgoff)
return -EINVAL;
- if (vma->vm_flags & VM_WRITE)
- return -EPERM;
-
devp = file->private_data;
addr = (unsigned long)devp->hd_hpet;
@@ -371,12 +373,10 @@
irq = devp->hd_hdwirq;
if (irq) {
- char name[7];
-
- sprintf(name, "hpet%d", (int)(devp - hpetp->hp_dev));
+ sprintf(devp->hd_name, "hpet%d", (int)(devp - hpetp->hp_dev));
if (request_irq
- (irq, hpet_interrupt, SA_INTERRUPT, name, (void *)devp)) {
+ (irq, hpet_interrupt, SA_INTERRUPT, devp->hd_name, (void
*)devp)) {
printk(KERN_ERR "hpet: IRQ %d is not free\n", irq);
irq = 0;
}
@@ -731,73 +731,6 @@
static struct ctl_table_header *sysctl_header;
-static void *hpet_start(struct seq_file *s, loff_t * pos)
-{
- struct hpets *hpetp;
- loff_t n;
-
- for (n = *pos, hpetp = hpets; hpetp; hpetp = hpetp->hp_next)
- if (!n--)
- return hpetp;
-
- return 0;
-}
-
-static void *hpet_next(struct seq_file *s, void *v, loff_t * pos)
-{
- struct hpets *hpetp;
-
- hpetp = v;
- ++*pos;
- return hpetp->hp_next;
-}
-
-static void hpet_stop(struct seq_file *s, void *v)
-{
- return;
-}
-
-static int hpet_show(struct seq_file *s, void *v)
-{
- struct hpets *hpetp;
- struct hpet *hpet;
- u64 cap, vendor, period;
-
- hpetp = v;
- hpet = hpetp->hp_hpet;
-
- cap = readq(&hpet->hpet_cap);
- period = (cap & HPET_COUNTER_CLK_PERIOD_MASK) >>
- HPET_COUNTER_CLK_PERIOD_SHIFT;
- vendor = (cap & HPET_VENDOR_ID_MASK) >> HPET_VENDOR_ID_SHIFT;
-
- seq_printf(s,
- "HPET%d period = %d 10**-15 vendor = 0x%x number timer =
%d\n",
- hpetp->hp_which, (u32) period, (u32) vendor,
- hpetp->hp_ntimer);
-
- return 0;
-}
-
-static struct seq_operations hpet_seq_ops = {
- .start = hpet_start,
- .next = hpet_next,
- .stop = hpet_stop,
- .show = hpet_show
-};
-
-static int hpet_proc_open(struct inode *inode, struct file *file)
-{
- return seq_open(file, &hpet_seq_ops);
-}
-
-static struct file_operations hpet_proc_fops = {
- .open = hpet_proc_open,
- .read = seq_read,
- .llseek = seq_lseek,
- .release = seq_release
-};
-
/*
* Adjustment for when arming the timer with
* initial conditions. That is, main counter
@@ -1025,19 +958,12 @@
static int __init hpet_init(void)
{
- struct proc_dir_entry *entry;
-
(void)acpi_bus_register_driver(&hpet_acpi_driver);
if (hpets) {
if (misc_register(&hpet_misc))
return -ENODEV;
- entry = create_proc_entry("driver/hpet", 0, 0);
-
- if (entry)
- entry->proc_fops = &hpet_proc_fops;
-
sysctl_header = register_sysctl_table(dev_root, 0);
#ifdef CONFIG_TIME_INTERPOLATION
@@ -1062,10 +988,8 @@
{
acpi_bus_unregister_driver(&hpet_acpi_driver);
- if (hpets) {
+ if (hpets) unregister_sysctl_table(sysctl_header);
- remove_proc_entry("driver/hpet", NULL);
- }
return;
}
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/include/linux/hpet.h
linux-2.6.7-mm1-hpet/include/linux/hpet.h
--- linux-2.6.7-mm1-orig/include/linux/hpet.h 2004-06-21
07:43:05.000000000 -0400
+++ linux-2.6.7-mm1-hpet/include/linux/hpet.h 2004-06-21
07:48:31.000000000 -0400
@@ -115,6 +115,8 @@
void *ht_opaque;
};
+#define HD_STATE(HD, TIMER) (HD)->hd_state |= (1 << TIMER)
+
struct hpet_data {
unsigned long hd_address;
unsigned short hd_nirqs;
diff -ruN -X /home/picco/losl/dontdiff
linux-2.6.7-mm1-orig/include/linux/miscdevice.h
linux-2.6.7-mm1-hpet/include/linux/miscdevice.h
--- linux-2.6.7-mm1-orig/include/linux/miscdevice.h 2004-06-21
07:43:05.000000000 -0400
+++ linux-2.6.7-mm1-hpet/include/linux/miscdevice.h 2004-06-21
10:20:47.000000000 -0400
@@ -33,9 +33,9 @@
#define SGI_STREAMS_KEYBOARD 150
/* drivers/sgi/char/usema.c */
#define SGI_USEMACLONE 151
-#define HPET_MINOR 152
#define TUN_MINOR 200
+#define HPET_MINOR 228
struct device;
next prev parent reply other threads:[~2004-06-23 21:37 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200406181616.i5IGGECd003812@hera.kernel.org>
2004-06-18 20:57 ` [PATCH] HPET driver Jeff Garzik
2004-06-18 21:55 ` Andrew Morton
2004-06-18 22:45 ` Jeff Garzik
2004-06-23 21:34 ` Robert Picco [this message]
2004-06-23 21:41 ` Jeff Garzik
2004-06-23 22:23 ` Andrew Morton
2004-05-13 22:34 Robert Picco
2004-05-13 23:17 ` Jeff Garzik
2004-05-13 23:42 ` Andrew Morton
2004-05-13 23:46 ` Andrew Morton
2004-05-13 23:49 ` Jeff Garzik
2004-05-14 11:19 ` Vojtech Pavlik
2004-05-14 16:59 ` Jeff Garzik
2004-05-17 22:33 ` Robert Picco
2004-05-17 22:39 ` Jeff Garzik
2004-05-17 22:43 ` Jeff Garzik
2004-05-17 23:05 ` Andrew Morton
2004-05-17 23:06 ` Jeff Garzik
2004-05-17 23:12 ` Andrew Morton
2004-05-17 23:18 ` Jeff Garzik
2004-05-17 23:25 ` Russell King
2004-05-17 23:41 ` Jeff Garzik
2004-05-17 23:33 ` Andrew Morton
2004-05-17 23:42 ` Jeff Garzik
2004-05-18 1:46 ` Andrew Morton
2004-05-18 1:59 ` Jeff Garzik
[not found] ` <16553.28862.590897.171478@napali.hpl.hp.com>
2004-05-20 2:01 ` Jeff Garzik
2004-05-13 23:18 ` Andrew Morton
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=40D9F74A.9090508@hp.com \
--to=robert.picco@hp.com \
--cc=akpm@osdl.org \
--cc=jgarzik@pobox.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.