diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/misc/hdpuftrs/hdpu_nexus.c |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/misc/hdpuftrs/hdpu_nexus.c')
-rw-r--r-- | drivers/misc/hdpuftrs/hdpu_nexus.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/drivers/misc/hdpuftrs/hdpu_nexus.c b/drivers/misc/hdpuftrs/hdpu_nexus.c new file mode 100644 index 000000000000..c203b27269ea --- /dev/null +++ b/drivers/misc/hdpuftrs/hdpu_nexus.c | |||
@@ -0,0 +1,111 @@ | |||
1 | /* | ||
2 | * Sky Nexus Register Driver | ||
3 | * | ||
4 | * Copyright (C) 2002 Brian Waite | ||
5 | * | ||
6 | * This driver allows reading the Nexus register | ||
7 | * It exports the /proc/sky_chassis_id and also | ||
8 | * /proc/sky_slot_id pseudo-file for status information. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License | ||
12 | * as published by the Free Software Foundation; either version | ||
13 | * 2 of the License, or (at your option) any later version. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #include <linux/version.h> | ||
18 | #include <linux/module.h> | ||
19 | #include <linux/kernel.h> | ||
20 | #include <linux/proc_fs.h> | ||
21 | #include <linux/hdpu_features.h> | ||
22 | #include <linux/pci.h> | ||
23 | |||
24 | #include <linux/device.h> | ||
25 | |||
26 | static int hdpu_nexus_probe(struct device *ddev); | ||
27 | static int hdpu_nexus_remove(struct device *ddev); | ||
28 | |||
29 | static struct proc_dir_entry *hdpu_slot_id; | ||
30 | static struct proc_dir_entry *hdpu_chassis_id; | ||
31 | static int slot_id = -1; | ||
32 | static int chassis_id = -1; | ||
33 | |||
34 | static struct device_driver hdpu_nexus_driver = { | ||
35 | .name = HDPU_NEXUS_NAME, | ||
36 | .bus = &platform_bus_type, | ||
37 | .probe = hdpu_nexus_probe, | ||
38 | .remove = hdpu_nexus_remove, | ||
39 | }; | ||
40 | |||
41 | int hdpu_slot_id_read(char *buffer, char **buffer_location, off_t offset, | ||
42 | int buffer_length, int *zero, void *ptr) | ||
43 | { | ||
44 | |||
45 | if (offset > 0) | ||
46 | return 0; | ||
47 | return sprintf(buffer, "%d\n", slot_id); | ||
48 | } | ||
49 | |||
50 | int hdpu_chassis_id_read(char *buffer, char **buffer_location, off_t offset, | ||
51 | int buffer_length, int *zero, void *ptr) | ||
52 | { | ||
53 | |||
54 | if (offset > 0) | ||
55 | return 0; | ||
56 | return sprintf(buffer, "%d\n", chassis_id); | ||
57 | } | ||
58 | |||
59 | static int hdpu_nexus_probe(struct device *ddev) | ||
60 | { | ||
61 | struct platform_device *pdev = to_platform_device(ddev); | ||
62 | struct resource *res; | ||
63 | |||
64 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
65 | int *nexus_id_addr; | ||
66 | nexus_id_addr = | ||
67 | ioremap(res->start, (unsigned long)(res->end - res->start)); | ||
68 | if (nexus_id_addr) { | ||
69 | slot_id = (*nexus_id_addr >> 8) & 0x1f; | ||
70 | chassis_id = *nexus_id_addr & 0xff; | ||
71 | iounmap(nexus_id_addr); | ||
72 | } else | ||
73 | printk("Could not map slot id\n"); | ||
74 | hdpu_slot_id = create_proc_entry("sky_slot_id", 0666, &proc_root); | ||
75 | hdpu_slot_id->read_proc = hdpu_slot_id_read; | ||
76 | hdpu_slot_id->nlink = 1; | ||
77 | |||
78 | hdpu_chassis_id = create_proc_entry("sky_chassis_id", 0666, &proc_root); | ||
79 | hdpu_chassis_id->read_proc = hdpu_chassis_id_read; | ||
80 | hdpu_chassis_id->nlink = 1; | ||
81 | return 0; | ||
82 | } | ||
83 | |||
84 | static int hdpu_nexus_remove(struct device *ddev) | ||
85 | { | ||
86 | slot_id = -1; | ||
87 | chassis_id = -1; | ||
88 | remove_proc_entry("sky_slot_id", &proc_root); | ||
89 | remove_proc_entry("sky_chassis_id", &proc_root); | ||
90 | hdpu_slot_id = 0; | ||
91 | hdpu_chassis_id = 0; | ||
92 | return 0; | ||
93 | } | ||
94 | |||
95 | static int __init nexus_init(void) | ||
96 | { | ||
97 | int rc; | ||
98 | rc = driver_register(&hdpu_nexus_driver); | ||
99 | return rc; | ||
100 | } | ||
101 | |||
102 | static void __exit nexus_exit(void) | ||
103 | { | ||
104 | driver_unregister(&hdpu_nexus_driver); | ||
105 | } | ||
106 | |||
107 | module_init(nexus_init); | ||
108 | module_exit(nexus_exit); | ||
109 | |||
110 | MODULE_AUTHOR("Brian Waite"); | ||
111 | MODULE_LICENSE("GPL"); | ||