All of lore.kernel.org
 help / color / mirror / Atom feed
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;







  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.