patch-2.1.51 linux/drivers/macintosh/nvram.c
Next file: linux/drivers/macintosh/platinum.c
Previous file: linux/drivers/macintosh/macserial.h
Back to the patch index
Back to the overall index
- Lines: 88
- Date:
Sat Aug 16 09:53:08 1997
- Orig file:
v2.1.50/linux/drivers/macintosh/nvram.c
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.50/linux/drivers/macintosh/nvram.c linux/drivers/macintosh/nvram.c
@@ -0,0 +1,87 @@
+/*
+ * /dev/nvram driver for Power Macintosh.
+ */
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/miscdevice.h>
+#include <linux/fcntl.h>
+#include <linux/nvram.h>
+#include <linux/init.h>
+#include <asm/uaccess.h>
+
+#define NVRAM_SIZE 8192
+
+static long long nvram_llseek(struct inode *inode, struct file *file,
+ loff_t offset, int origin)
+{
+ switch (origin) {
+ case 1:
+ offset += file->f_pos;
+ break;
+ case 2:
+ offset += NVRAM_SIZE;
+ break;
+ }
+ if (offset < 0)
+ return -EINVAL;
+ file->f_pos = offset;
+ return file->f_pos;
+}
+
+static long read_nvram(struct inode *inode, struct file *file,
+ char *buf, unsigned long count)
+{
+ unsigned int i = file->f_pos;
+ char *p = buf;
+
+ for (; count > 0 && i < NVRAM_SIZE; ++i, ++p, --count)
+ put_user(nvram_read_byte(i), p);
+ file->f_pos = i;
+ return p - buf;
+}
+
+static long write_nvram(struct inode *inode, struct file *file,
+ const char *buf, unsigned long count)
+{
+ unsigned int i = file->f_pos;
+ const char *p = buf;
+ char c;
+
+ for (; count > 0 && i < NVRAM_SIZE; ++i, ++p, --count) {
+ get_user(c, p);
+ nvram_write_byte(i, c);
+ }
+ file->f_pos = i;
+ return p - buf;
+}
+
+static int nvram_open(struct inode *inode, struct file *file)
+{
+ return 0;
+}
+
+struct file_operations nvram_fops = {
+ nvram_llseek,
+ read_nvram,
+ write_nvram,
+ NULL, /* nvram_readdir */
+ NULL, /* nvram_select */
+ NULL, /* nvram_ioctl */
+ NULL, /* nvram_mmap */
+ nvram_open,
+ NULL, /* no special release code */
+ NULL /* fsync */
+};
+
+static struct miscdevice nvram_dev = {
+ NVRAM_MINOR,
+ "nvram",
+ &nvram_fops
+};
+
+__initfunc(int nvram_init(void))
+{
+ misc_register(&nvram_dev);
+ return 0;
+}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov