diff options
Diffstat (limited to 'packages')
16 files changed, 0 insertions, 6753 deletions
diff --git a/packages/linux/nas100d-kernel.inc b/packages/linux/nas100d-kernel.inc deleted file mode 100644 index 69e9f4d285..0000000000 --- a/packages/linux/nas100d-kernel.inc +++ /dev/null @@ -1,243 +0,0 @@ -# nas100d-kernel.inc -# -# Standard definitions for any NAS 100d Linux kernel. -# Include this file in a .bb which specifies, at least, -# PN,PV,PR for the desired kernel -# -# Define the following *before* including this file as -# required: -# -# N1K_FILES - kernel-tree path of files to install -# N1K_PATCHES - full list of patches to apply -# -# N1K_SUFFIX - the suffix to add after 'zImage-' in the -# deploy/images directory - defaults to "ludeos" -# -# -------------------------------------------------------------- -# -# Within this file bitbake variables local to the file are -# named N1K_FOO -# -SECTION = "kernel" -DESCRIPTION = "Linux kernel for the Iomega NAS 100d device" -LICENSE = "GPL" -MAINTAINER = "John Bowler <jbowler@acm.org>" - -DEPENDS += "devio-native" - -# Linux kernel source has the general form linux-X.Y.Z-patchP, -# X.Y is the major version number, Z (which may have multiple -# parts) is a sub-version and 'patch' is something like 'mm' or -# 'ac' with a patch version. The original bz2 archive will be -# in a directory/file vX.Y/linux-X.Y.Z.tar.bz2. The unpacked -# source will be in the directory linux-X.Y.Z and this directory -# name corresponds to the module directory (in /lib/modules). -# -# The corresponding .bb file should be called: -# -# package_X.Y.Z-patchP -# -# Giving PN=package PV=X.Y.Z-patchP (and PR is set in the .bb -# file). Files, including the all important defconfig, are -# searched for in the following directories (last one first): -# -# ludeos-kernel-2.6.11.2 -# nas100d-kernel/files -# nas100d-kernel/X.Y -# nas100d-kernel/X.Y.Z -# nas100d-kernel/X.Y.Z-patch -# nas100d-kernel/X.Y.Z-patchP -# package-X.Y.Z-patchP -# -# This allows sharing of patch files and other useful source! -# To share a file or patch with an earlier version put it in -# the shared directory - e.g. to use foo.patch on 2.6.11.2 and -# 2.6.11.4 it should be in directory nas100d-kernel/2.6.11. -# -# Note that when there are multiple patches the X.Y.Z-patch form -# uses base-patch (e.g. 2.6.12-mm) whereas X.Y.Z-patchP has the -# full form, for example 2.6.12-rc3-mm1 (in the same case). - -#PN=package-name -#PV=package-version (full) - -# The patch has the general form (rcN|preN|acN|mmN|bkN)* with the -# separate patch items being separated by '-' characters. The -# rc patch is first and has the important property that it -# requires the *preceding* kernel base version and that this -# will be the source directory name. -python () { - # The patches list may be empty. This code starts with the base - # kernel version and steps through the patches. Because the rc and - # pre patches actually require the *preceding* kernel version the code - # fixes that up appropriately. - pv = bb.data.getVar("PV",d,1).split('-') - kernel = pv[0].split('.') - base = pv[0] - name = [base] - major = '.'.join(name[0].split('.')[0:2]) - minor = '.'.join(name[0].split('.')[0:3]) - patch_uri = [ None ] - filedir = "${FILE_DIRNAME}/nas100d-kernel/%s" - # This entry will become the last one (everything is inserted before it) - filepath = [ filedir % "files" ] - pref = 10 - mmac = 0 - for patch in pv[1:]: - name.append(patch) - pname = '-'.join(name) - if patch[0:2] == "rc" or patch[0:3] == "pre": - patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/v%s/testing/patch-%s.bz2;patch=1;pname=%s" % (major, pname, pname)) - kernel[-1] = str(int(kernel[-1]) - 1) - if patch[0:2] == "rc" and pref == 10: - pref = 6 - filepath[0:0] = [ filedir % name[0] ] - filepath[0:0] = [ filedir % (name[0] + "-rc") ] - else: - pref = 2 - elif patch[0:2] == "bk" or patch[0:3] == "git": - patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/v%s/snapshots/patch-%s.bz2;patch=1;pname=%s" % (major, pname, pname)) - pref = 2 - elif patch[0:2] == "ac": - patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/people/alan/linux-%s/%s/patch-%s" % (major, base, pname)) - mmac = 2 - filepath[0:0] = [ filedir % (name[0] + "-ac") ] - elif patch[0:2] == "mm": - patch_uri.append("ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/%s/%s/%s/%s.bz2;patch=1;pname=%s" % (major, base, pname, pname, pname)) - mmac = 2 - filepath[0:0] = [ filedir % (name[0] + "-mm") ] - else: - raise bb.build.FuncFailed("nas100d-kernel: patch %s not recognized in %s" % (patch, '-'.join(pv))) - filepath[0:0] = [ filedir % pname ] - base = pname - - base = '.'.join(kernel) - patch_uri[0] = "ftp://ftp.kernel.org/pub/linux/kernel/v%s/linux-%s.tar.bz2" % (major, base) - filepath[-1:-1] = [ filedir % base ] - if base != minor: - filepath[-1:-1] = [ filedir % minor ] - filepath[-1:-1] = [ filedir % major ] - - bb.data.setVar("N1K_SRCMAJ", major, d) - # bb.note("N1K_SRCMAJ := %s" % major) - bb.data.setVar("N1K_SRCVER", base, d) - # bb.note("N1K_SRCVER := %s" % base) - bb.data.setVar("N1K_SRCURI", ' '.join(patch_uri), d) - # bb.note("N1K_SRCURI := %s" % ' '.join(patch_uri)) - bb.data.setVar("N1K_FILESPATH", ':'.join(filepath), d) - # bb.note("N1K_FILESPATH := %s" % ' '.join(filepath)) - bb.data.setVar("DEFAULT_PREFERENCE", pref-mmac, d) - # bb.note("DEFAULT_PREFERENCE := %s" % (pref-mmac)) -} - -# FILESPATH: this list is in order last-searched-first, therefore -# the first entry is the *latest* and/or most specific -FILESPATH = "${N1K_FILESPATH}:${FILE_DIRNAME}/nas100d-kernel/" - -# The working directory will be the 'base' version (which may not be the -# same as implied by the PV variable because it corresponds to the prior -# minor version for rc and pre patched versions). -S = "${WORKDIR}/linux-${N1K_SRCVER}" - -# N1K_FILES is a list of additional files added to the source, these are -# put in place before the patches, so may themselves be patched. The list -# gives the path name relative to the base of the kernel source tree, the -# base file name is used to *find* the file. -N1K_FILES ?= "" - -N1K_SRCFILES = "${@( ' '.join([ ("file://" + n2k_file.split('/')[-1]) for n2k_file in bb.data.getVar("N1K_FILES",d,1).split(None) ]) )}" - -# N1K_PATCHES is a list of additional patches, the list specified -# here comes from the ludeos-2.6.11.2 kernel, typically extra -# patches will be required and very often patches will need to -# be removed (i.e. the default is typically not very useful!) -N1K_PATCHES ?= "" - -N1K_SUFFIX ?= "ludeos" - -SRC_URI = "${N1K_SRCURI}" -SRC_URI += "${N1K_SRCFILES}" -SRC_URI += "${N1K_PATCHES}" -SRC_URI += "file://defconfig" - -COMPATIBLE_HOST = 'arm.*-linux' - -inherit kernel - -ARCH = "arm" -KERNEL_IMAGETYPE = "zImage" -# To specify the console set KERNEL_CONSOLE in the .bb file. -# CMDLINE_ROOT contains the boot options, CMDLINE_KERNEL_OPTIONS -# contains the things for a specific kernel. -# CMDLINE_KERNEL_OPTIONS ?= "reboot=s" -CMDLINE_KERNEL_OPTIONS ?= -CMDLINE_ROOT = "root=/dev/mtdblock2 rw rootfstype=jffs2 mem=64M@0x00000000 init=/linuxrc" -CMDLINE_DEBUG = -CMDLINE = "${CMDLINE_ROOT} ${CMDLINE_KERNEL_OPTIONS} ${CMDLINE_DEBUG} ${CMDLINE_CONSOLE}" - -# Add the architecture compiler flags to KERNEL_CC and KERNEL_LD as -# required. Notice that this has to be done for each separately built -# module as well! -KERNEL_CC += "${TARGET_CC_KERNEL_ARCH}" -KERNEL_LD += "${TARGET_LD_KERNEL_ARCH}" - -# Set EXTRAVERSION and LOCALVERSION to "" so that the kernel version -# remains pinned to the x.y.z form, also turn off the directory -# printing which provides almost all the output of an incremental build. -EXTRA_OEMAKE += "EXTRAVERSION=" -EXTRA_OEMAKE += "LOCALVERSION=" -EXTRA_OEMAKE += "MAKEFLAGS='--no-print-directory'" - -# Override KERNEL_RELEASE from kernel.bbclass to match: -KERNEL_RELEASE = "${KERNEL_VERSION}" - -# By putting the added files in place in a separate task before -# do_patch it becomes possible to patch these files. -do_unpacklocal() { - for f in ${N1K_FILES} - do - s="$(basename "$f")" - install -m 0644 "${WORKDIR}/$s" "${S}/$f" - done -} - -addtask unpacklocal before do_patch after do_unpack - -do_configure_prepend() { - rm -f ${S}/.config - echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >>'${S}/.config' - if test '${ARCH_BYTE_SEX}' = be - then - echo 'CONFIG_CPU_BIG_ENDIAN=y' >>'${S}/.config' - fi - if test '${SLUGOS_IMAGESEX}' = big-endian - then - echo 'CONFIG_JFFS2_BIG_ENDIAN=y' >>'${S}/.config' - fi - if test '${SLUGOS_IMAGESEX}' = little-endian - then - echo 'CONFIG_JFFS2_LITTLE_ENDIAN=y' >>'${S}/.config' - fi - sed -e '/CONFIG_CPU_BIG_ENDIAN/d' -e '/CONFIG_CMDLINE=/d' \ - -e '/CONFIG_JFFS2_NATIVE_ENDIAN=/d' \ - -e '/CONFIG_JFFS2_BIG_ENDIAN=/d' \ - -e '/CONFIG_JFFS2_LITTLE_ENDIAN=/d' \ - '${WORKDIR}/defconfig' >>'${S}/.config' - rm -rf ${S}/include/asm-arm/arch ${S}/include/asm-arm/proc \ - ${S}/include/asm-arm/.proc ${S}/include/asm-arm/.arch -} - -do_deploy[dirs] = "${S}" -do_deploy() { - install -d ${DEPLOY_DIR}/images - install -m 644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${N1K_SUFFIX} -} - -addtask deploy before do_build after do_compile - -python () { - # Don't build the kernel unless we're targeting an nas100d - mach = bb.data.getVar("MACHINE", d, 1) - if mach != 'nas100d': - raise bb.parse.SkipPackage("LudeOS only builds for the Iomega NAS 100d") -} diff --git a/packages/linux/nas100d-kernel/.mtn2git_empty b/packages/linux/nas100d-kernel/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 --- a/packages/linux/nas100d-kernel/.mtn2git_empty +++ /dev/null diff --git a/packages/linux/nas100d-kernel/2.6.15/.mtn2git_empty b/packages/linux/nas100d-kernel/2.6.15/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 --- a/packages/linux/nas100d-kernel/2.6.15/.mtn2git_empty +++ /dev/null diff --git a/packages/linux/nas100d-kernel/2.6.15/00-memory-h-page-shift.patch b/packages/linux/nas100d-kernel/2.6.15/00-memory-h-page-shift.patch deleted file mode 100644 index 30d34952d5..0000000000 --- a/packages/linux/nas100d-kernel/2.6.15/00-memory-h-page-shift.patch +++ /dev/null @@ -1,91 +0,0 @@ -http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3218/1 - -PAGE_SHIFT is undeclared in include/asm-arm/arch-ixp4xx/memory.h, identified by the following kernel compilation error: - -CC [M] sound/core/memory.o -In file included from include/asm/memory.h:27, -from include/asm/io.h:28, -from sound/core/memory.c:24: -include/asm/arch/memory.h: In function `__arch_adjust_zones': -include/asm/arch/memory.h:28: error: `PAGE_SHIFT' undeclared (first use -in this function) - -This patch replaces my previous attempt at fixing this problem (Patch 3214/1) and is based on the following feedback: - -Russell King wrote: -> The error you see came up on SA1100. The best solution was to move -> the __arch_adjust_zones() function out of line. I suggest ixp4xx -> does the same. - -I have moved the function out of line into arch/arm/mach-ixp4xx/common-pci.c as suggested. - -Signed-off-by: Rod Whitby <rod@whitby.id.au> - ---- linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/memory.h~ 2005-12-30 05:18:27.000000000 +1030 -+++ linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/memory.h 2005-12-30 05:36:04.000000000 +1030 -@@ -16,31 +16,10 @@ - - #ifndef __ASSEMBLY__ - --/* -- * Only first 64MB of memory can be accessed via PCI. -- * We use GFP_DMA to allocate safe buffers to do map/unmap. -- * This is really ugly and we need a better way of specifying -- * DMA-capable regions of memory. -- */ --static inline void __arch_adjust_zones(int node, unsigned long *zone_size, -- unsigned long *zhole_size) --{ -- unsigned int sz = SZ_64M >> PAGE_SHIFT; -- -- /* -- * Only adjust if > 64M on current system -- */ -- if (node || (zone_size[0] <= sz)) -- return; -- -- zone_size[1] = zone_size[0] - sz; -- zone_size[0] = sz; -- zhole_size[1] = zhole_size[0]; -- zhole_size[0] = 0; --} -+void ixp4xx_adjust_zones(int node, unsigned long *size, unsigned long *holes); - - #define arch_adjust_zones(node, size, holes) \ -- __arch_adjust_zones(node, size, holes) -+ ixp4xx_adjust_zones(node, size, holes) - - #define ISA_DMA_THRESHOLD (SZ_64M - 1) - ---- linux-2.6.15-rc7/arch/arm/mach-ixp4xx/common-pci.c~ 2005-12-30 05:16:03.000000000 +1030 -+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/common-pci.c 2005-12-30 05:43:55.000000000 +1030 -@@ -341,6 +341,29 @@ int dma_needs_bounce(struct device *dev, - return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M); - } - -+/* -+ * Only first 64MB of memory can be accessed via PCI. -+ * We use GFP_DMA to allocate safe buffers to do map/unmap. -+ * This is really ugly and we need a better way of specifying -+ * DMA-capable regions of memory. -+ */ -+void __init ixp4xx_adjust_zones(int node, unsigned long *zone_size, -+ unsigned long *zhole_size) -+{ -+ unsigned int sz = SZ_64M >> PAGE_SHIFT; -+ -+ /* -+ * Only adjust if > 64M on current system -+ */ -+ if (node || (zone_size[0] <= sz)) -+ return; -+ -+ zone_size[1] = zone_size[0] - sz; -+ zone_size[0] = sz; -+ zhole_size[1] = zhole_size[0]; -+ zhole_size[0] = 0; -+} -+ - void __init ixp4xx_pci_preinit(void) - { - unsigned long processor_id; diff --git a/packages/linux/nas100d-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch b/packages/linux/nas100d-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch deleted file mode 100644 index 3fa0535abf..0000000000 --- a/packages/linux/nas100d-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch +++ /dev/null @@ -1,70 +0,0 @@ -drivers/mtd/redboot.c: recognise a foreign byte sex partition table - -The RedBoot boot loader writes flash partition tables containing native -byte sex 32 bit values. When booting an opposite byte sex kernel (e.g. an -LE kernel from BE RedBoot) the current MTD driver fails to handle the -partition table and therefore is unable to generate the correct partition -map for the flash. - -The patch recognises that the FIS directory (the partition table) is -byte-reversed by examining the partition table size, which is known to be -one erase block (this is an assumption made elsewhere in redboot.c). If -the size matches the erase block after byte swapping the value then -byte-reversal is assumed, if not no further action is taken. The patched -code is fail safe; should redboot.c be changed to support a partition table -with a modified size field the test will fail and the partition table will -be assumed to have the host byte sex. - -If byte-reversal is detected the patch byte swaps the remainder of the 32 -bit fields in the copy of the table; this copy is then used to set up the -MTD partition map. - -Signed-off-by: John Bowler <jbowler@acm.org> -Signed-off-by: Andrew Morton <akpm@osdl.org> -Modified slightly and -Signed-off-by: David Woodhouse <dwmw2@infradead.org> - -Index: drivers/mtd/redboot.c -=================================================================== -RCS file: /home/cvs/mtd/drivers/mtd/redboot.c,v -retrieving revision 1.18 -retrieving revision 1.19 -diff -u -p -r1.18 -r1.19 ---- linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000 -@@ -89,8 +89,32 @@ static int parse_redboot_partitions(stru - i = numslots; - break; - } -- if (!memcmp(buf[i].name, "FIS directory", 14)) -+ if (!memcmp(buf[i].name, "FIS directory", 14)) { -+ /* This is apparently the FIS directory entry for the -+ * FIS directory itself. The FIS directory size is -+ * one erase block; if the buf[i].size field is -+ * swab32(erasesize) then we know we are looking at -+ * a byte swapped FIS directory - swap all the entries! -+ * (NOTE: this is 'size' not 'data_length'; size is -+ * the full size of the entry.) -+ */ -+ if (swab32(buf[i].size) == master->erasesize) { -+ int j; -+ for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) { -+ /* The unsigned long fields were written with the -+ * wrong byte sex, name and pad have no byte sex. -+ */ -+ swab32s(&buf[j].flash_base); -+ swab32s(&buf[j].mem_base); -+ swab32s(&buf[j].size); -+ swab32s(&buf[j].entry_point); -+ swab32s(&buf[j].data_length); -+ swab32s(&buf[j].desc_cksum); -+ swab32s(&buf[j].file_cksum); -+ } -+ } - break; -+ } - } - if (i == numslots) { - /* Didn't find it */ - - diff --git a/packages/linux/nas100d-kernel/2.6.15/15-jffs2-endian-config.patch b/packages/linux/nas100d-kernel/2.6.15/15-jffs2-endian-config.patch deleted file mode 100644 index fdebb652a7..0000000000 --- a/packages/linux/nas100d-kernel/2.6.15/15-jffs2-endian-config.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- linux-2.6.15/fs/Kconfig~ 2006-01-03 13:51:10.000000000 +1030 -+++ linux-2.6.15/fs/Kconfig 2006-01-05 01:35:36.000000000 +1030 -@@ -1132,6 +1132,31 @@ config JFFS2_CMODE_SIZE - - endchoice - -+choice -+ prompt "JFFS2 endianness" -+ default JFFS2_NATIVE_ENDIAN -+ depends on JFFS2_FS -+ help -+ You can set here the default endianness of JFFS2 from -+ the available options. Don't touch if unsure. -+ -+config JFFS2_NATIVE_ENDIAN -+ bool "native endian" -+ help -+ Uses a native endian bytestream. -+ -+config JFFS2_BIG_ENDIAN -+ bool "big endian" -+ help -+ Uses a big endian bytestream. -+ -+config JFFS2_LITTLE_ENDIAN -+ bool "little endian" -+ help -+ Uses a little endian bytestream. -+ -+endchoice -+ - config CRAMFS - tristate "Compressed ROM file system support (cramfs)" - select ZLIB_INFLATE ---- linux-2.6.15/fs/jffs2/nodelist.h~ 2006-01-05 01:37:06.000000000 +1030 -+++ linux-2.6.15/fs/jffs2/nodelist.h 2006-01-05 01:37:54.000000000 +1030 -@@ -29,12 +29,10 @@ - #include "os-linux.h" - #endif - --#define JFFS2_NATIVE_ENDIAN -- - /* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from - whatever OS we're actually running on here too. */ - --#if defined(JFFS2_NATIVE_ENDIAN) -+#if defined(CONFIG_JFFS2_NATIVE_ENDIAN) - #define cpu_to_je16(x) ((jint16_t){x}) - #define cpu_to_je32(x) ((jint32_t){x}) - #define cpu_to_jemode(x) ((jmode_t){os_to_jffs2_mode(x)}) -@@ -42,7 +40,7 @@ - #define je16_to_cpu(x) ((x).v16) - #define je32_to_cpu(x) ((x).v32) - #define jemode_to_cpu(x) (jffs2_to_os_mode((x).m)) --#elif defined(JFFS2_BIG_ENDIAN) -+#elif defined(CONFIG_JFFS2_BIG_ENDIAN) - #define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)}) - #define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)}) - #define cpu_to_jemode(x) ((jmode_t){cpu_to_be32(os_to_jffs2_mode(x))}) -@@ -50,7 +48,7 @@ - #define je16_to_cpu(x) (be16_to_cpu(x.v16)) - #define je32_to_cpu(x) (be32_to_cpu(x.v32)) - #define jemode_to_cpu(x) (be32_to_cpu(jffs2_to_os_mode((x).m))) --#elif defined(JFFS2_LITTLE_ENDIAN) -+#elif defined(CONFIG_JFFS2_LITTLE_ENDIAN) - #define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)}) - #define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)}) - #define cpu_to_jemode(x) ((jmode_t){cpu_to_le32(os_to_jffs2_mode(x))}) diff --git a/packages/linux/nas100d-kernel/2.6.15/40-rtc-class.patch b/packages/linux/nas100d-kernel/2.6.15/40-rtc-class.patch deleted file mode 100644 index feea3f2f8b..0000000000 --- a/packages/linux/nas100d-kernel/2.6.15/40-rtc-class.patch +++ /dev/null @@ -1,2719 +0,0 @@ ---- linux-nslu2.orig/include/linux/rtc.h 2006-01-03 15:31:18.000000000 +0100 -+++ linux-nslu2/include/linux/rtc.h 2006-01-03 15:34:24.000000000 +0100 -@@ -91,8 +91,81 @@ struct rtc_pll_info { - #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ - #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ - -+/* interrupt flags */ -+#define RTC_IRQF 0x80 /* any of the following is active */ -+#define RTC_PF 0x40 -+#define RTC_AF 0x20 -+#define RTC_UF 0x10 -+ - #ifdef __KERNEL__ - -+#include <linux/device.h> -+#include <linux/seq_file.h> -+#include <linux/cdev.h> -+#include <linux/poll.h> -+ -+struct rtc_class_ops { -+ int (*open)(struct device *); -+ void (*release)(struct device *); -+ int (*ioctl)(struct device *, unsigned int, unsigned long); -+ int (*read_time)(struct device *, struct rtc_time *); -+ int (*set_time)(struct device *, struct rtc_time *); -+ int (*read_alarm)(struct device *, struct rtc_wkalrm *); -+ int (*set_alarm)(struct device *, struct rtc_wkalrm *); -+ int (*proc)(struct device *, struct seq_file *); -+ int (*set_mmss)(struct device *, unsigned long secs); -+ int (*irq_set_state)(struct device *, int enabled); -+ int (*irq_set_freq)(struct device *, int freq); -+}; -+ -+#define RTC_DEVICE_NAME_SIZE 20 -+struct rtc_task; -+ -+struct rtc_device -+{ -+ int id; -+ struct module *owner; -+ struct rw_semaphore lock; -+ struct class_device class_dev; -+ struct rtc_class_ops *ops; -+ char name[RTC_DEVICE_NAME_SIZE]; -+ -+ struct cdev char_dev; -+ struct semaphore char_sem; -+ -+ unsigned long irq_data; -+ spinlock_t irq_lock; -+ wait_queue_head_t irq_queue; -+ struct fasync_struct *async_queue; -+ -+ spinlock_t irq_task_lock; -+ struct rtc_task *irq_task; -+ int irq_freq; -+}; -+#define to_rtc_device(d) container_of(d, struct rtc_device, class_dev) -+ -+extern struct rtc_device *rtc_device_register(char *name, -+ struct device *dev, -+ struct rtc_class_ops *ops, -+ struct module *owner); -+extern void rtc_device_unregister(struct rtc_device *rdev); -+extern int rtc_interface_register(struct class_interface *intf); -+ -+ -+extern int rtc_month_days(unsigned int month, unsigned int year); -+extern int rtc_valid_tm(struct rtc_time *tm); -+extern int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time); -+extern void rtc_time_to_tm(unsigned long time, struct rtc_time *tm); -+ -+extern int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm); -+extern int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm); -+extern int rtc_read_alarm(struct class_device *class_dev, -+ struct rtc_wkalrm *alrm); -+extern int rtc_set_alarm(struct class_device *class_dev, -+ struct rtc_wkalrm *alrm); -+extern void rtc_update_irq(struct class_device *class_dev, -+ unsigned long num, unsigned long events); -+ - typedef struct rtc_task { - void (*func)(void *private_data); - void *private_data; ---- linux-nslu2.orig/drivers/Kconfig 2006-01-03 15:31:19.000000000 +0100 -+++ linux-nslu2/drivers/Kconfig 2006-01-04 01:27:31.000000000 +0100 -@@ -66,4 +66,6 @@ source "drivers/infiniband/Kconfig" - - source "drivers/sn/Kconfig" - -+source "drivers/rtc/Kconfig" -+ - endmenu ---- linux-nslu2.orig/drivers/Makefile 2006-01-03 15:33:32.000000000 +0100 -+++ linux-nslu2/drivers/Makefile 2006-01-04 01:27:31.000000000 +0100 -@@ -54,6 +54,7 @@ obj-$(CONFIG_USB_GADGET) += usb/gadget/ - obj-$(CONFIG_GAMEPORT) += input/gameport/ - obj-$(CONFIG_INPUT) += input/ - obj-$(CONFIG_I2O) += message/ -+obj-y += rtc/ - obj-$(CONFIG_I2C) += i2c/ - obj-$(CONFIG_W1) += w1/ - obj-$(CONFIG_HWMON) += hwmon/ ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-nslu2/drivers/rtc/class.c 2006-01-03 15:45:19.000000000 +0100 -@@ -0,0 +1,141 @@ -+/* -+ * RTC subsystem, base class -+ * -+ * Copyright (C) 2005 Tower Technologies -+ * Author: Alessandro Zummo <a.zummo@towertech.it> -+ * -+ * class skeleton from drivers/hwmon/hwmon.c -+ * -+ * 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 -+ * the Free Software Foundation; version 2 of the License. -+*/ -+ -+#include <linux/module.h> -+#include <linux/rtc.h> -+#include <linux/kdev_t.h> -+#include <linux/idr.h> -+ -+static DEFINE_IDR(rtc_idr); -+static DECLARE_MUTEX(idr_lock); -+struct class *rtc_class; -+ -+static void rtc_device_release(struct class_device *class_dev) -+{ -+ struct rtc_device *rtc = to_rtc_device(class_dev); -+ down(&idr_lock); -+ idr_remove(&rtc_idr, rtc->id); -+ up(&idr_lock); -+ kfree(rtc); -+} -+ -+/** -+ * rtc_device_register - register w/ RTC class -+ * @dev: the device to register -+ * -+ * rtc_device_unregister() must be called when the class device is no -+ * longer needed. -+ * -+ * Returns the pointer to the new struct class device. -+ */ -+struct rtc_device *rtc_device_register(char *name, struct device *dev, -+ struct rtc_class_ops *ops, -+ struct module *owner) -+{ -+ struct rtc_device *rtc; -+ int id, err; -+ -+ if (idr_pre_get(&rtc_idr, GFP_KERNEL) == 0) { -+ err = -ENOMEM; -+ goto exit; -+ } -+ -+ -+ down(&idr_lock); -+ err = idr_get_new(&rtc_idr, NULL, &id); -+ up(&idr_lock); -+ -+ if (err < 0) -+ goto exit; -+ -+ id = id & MAX_ID_MASK; -+ -+ if ((rtc = kzalloc(sizeof(struct rtc_device), GFP_KERNEL)) == NULL) { -+ err = -ENOMEM; -+ goto exit_idr; -+ } -+ -+ rtc->id = id; -+ rtc->ops = ops; -+ rtc->owner = owner; -+ rtc->class_dev.dev = dev; -+ rtc->class_dev.class = rtc_class; -+ rtc->class_dev.release = rtc_device_release; -+ -+ init_rwsem(&rtc->lock); -+ spin_lock_init(&rtc->irq_lock); -+ spin_lock_init(&rtc->irq_task_lock); -+ -+ strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE); -+ snprintf(rtc->class_dev.class_id, BUS_ID_SIZE, "rtc%d", id); -+ -+ if ((err = class_device_register(&rtc->class_dev))) -+ goto exit_kfree; -+ -+ dev_info(dev, "rtc core: registered %s as %s\n", -+ rtc->name, rtc->class_dev.class_id); -+ -+ return rtc; -+ -+exit_kfree: -+ kfree(rtc); -+ -+exit_idr: -+ idr_remove(&rtc_idr, id); -+ -+exit: -+ return ERR_PTR(err); -+} -+EXPORT_SYMBOL_GPL(rtc_device_register); -+ -+ -+/** -+ * rtc_device_unregister - removes the previously registered RTC class device -+ * -+ * @rtc: the RTC class device to destroy -+ */ -+void rtc_device_unregister(struct rtc_device *rtc) -+{ -+ down_write(&rtc->lock); -+ class_device_unregister(&rtc->class_dev); -+} -+EXPORT_SYMBOL_GPL(rtc_device_unregister); -+ -+int rtc_interface_register(struct class_interface *intf) -+{ -+ intf->class = rtc_class; -+ return class_interface_register(intf); -+} -+EXPORT_SYMBOL_GPL(rtc_interface_register); -+ -+static int __init rtc_init(void) -+{ -+ rtc_class = class_create(THIS_MODULE, "rtc"); -+ if (IS_ERR(rtc_class)) { -+ printk(KERN_ERR "%s: couldn't create class\n", __FILE__); -+ return PTR_ERR(rtc_class); -+ } -+ return 0; -+} -+ -+static void __exit rtc_exit(void) -+{ -+ class_destroy(rtc_class); -+} -+ -+module_init(rtc_init); -+module_exit(rtc_exit); -+ -+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towerteh.it>"); -+MODULE_DESCRIPTION("RTC class support"); -+MODULE_LICENSE("GPL"); ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-nslu2/drivers/rtc/Kconfig 2006-01-04 01:27:21.000000000 +0100 -@@ -0,0 +1,93 @@ -+# -+# RTC class/drivers configuration -+# -+ -+menu "Real Time Clock" -+ -+config RTC_CLASS -+ tristate "RTC class" -+ depends on EXPERIMENTAL -+ default y -+ help -+ Generic RTC class support. If you say yes here, you will -+ be allowed to plug one or more RTCs to your system. You will -+ probably want to enable one of more of the interfaces below. -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-class. -+ -+comment "RTC interfaces" -+ depends on RTC_CLASS -+ -+config RTC_INTF_SYSFS -+ tristate "sysfs" -+ depends on RTC_CLASS && SYSFS -+ default RTC_CLASS -+ help -+ Say yes here if you want to use your RTC using the sysfs -+ interface, /sys/class/rtc/rtcX . -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-sysfs. -+ -+config RTC_INTF_PROC -+ tristate "proc" -+ depends on RTC_CLASS && PROC_FS -+ default RTC_CLASS -+ help -+ Say yes here if you want to use your RTC using the proc -+ interface, /proc/driver/rtc . -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-proc. -+ -+config RTC_INTF_DEV -+ tristate "dev" -+ depends on RTC_CLASS -+ default RTC_CLASS -+ help -+ Say yes here if you want to use your RTC using the dev -+ interface, /dev/rtc . -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-dev. -+ -+comment "RTC drivers" -+ depends on RTC_CLASS -+ -+config RTC_DRV_X1205 -+ tristate "Xicor/Intersil X1205 RTC chip" -+ depends on RTC_CLASS && I2C -+ help -+ If you say yes here you get support for the -+ Xicor/Intersil X1205 RTC chip. -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-x1205. -+ -+config RTC_DRV_DS1672 -+ tristate "Dallas/Maxim DS1672" -+ depends on RTC_CLASS && I2C -+ help -+ If you say yes here you get support for the -+ Dallas/Maxim DS1672 timekeeping chip. -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-ds1672. -+ -+config RTC_DRV_TEST -+ tristate "Test driver/device" -+ depends on RTC_CLASS -+ help -+ If you say yes here you get support for the -+ RTC test driver. It's a software RTC which can be -+ used to test the RTC subsystem APIs. It gets -+ the time from the system clock. -+ You want this driver only if you are doing development -+ on the RTC subsystem. Please read the source code -+ for further details. -+ -+ This driver can also be built as a module. If so, the module -+ will be called rtc-test. -+ -+endmenu ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-nslu2/drivers/rtc/Makefile 2006-01-04 01:27:21.000000000 +0100 -@@ -0,0 +1,15 @@ -+# -+# Makefile for RTC class/drivers. -+# -+ -+obj-y += utils.o -+obj-$(CONFIG_RTC_CLASS) += rtc-core.o -+rtc-core-y := class.o interface.o -+obj-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o -+obj-$(CONFIG_RTC_INTF_PROC) += rtc-proc.o -+obj-$(CONFIG_RTC_INTF_DEV) += rtc-dev.o -+ -+obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o -+obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o -+obj-$(CONFIG_RTC_DRV_DS1672) += rtc-ds1672.o -+ ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-nslu2/drivers/rtc/interface.c 2006-01-03 15:34:24.000000000 +0100 -@@ -0,0 +1,189 @@ -+/* -+ * RTC subsystem, interface functions -+ * -+ * Copyright (C) 2005 Tower Technologies -+ * Author: Alessandro Zummo <a.zummo@towertech.it> -+ * -+ * based on arch/arm/common/rtctime.c -+ * -+ * 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 -+ * the Free Software Foundation; version 2 of the License. -+*/ -+ -+#include <linux/rtc.h> -+ -+extern struct class *rtc_class; -+ -+int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm) -+{ -+ int err = -EINVAL; -+ struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops; -+ -+ if (ops->read_time) { -+ memset(tm, 0, sizeof(struct rtc_time)); -+ err = ops->read_time(class_dev->dev, tm); -+ } -+ return err; -+} -+EXPORT_SYMBOL(rtc_read_time); -+ -+int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm) -+{ -+ int err; -+ struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops; -+ -+ err = rtc_valid_tm(tm); -+ if (err == 0 && ops->set_time) -+ err = ops->set_time(class_dev->dev, tm); -+ -+ return err; -+} -+EXPORT_SYMBOL(rtc_set_time); -+ -+int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) -+{ -+ struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops; -+ int err = -EINVAL; -+ -+ if (ops->read_alarm) { -+ memset(alarm, 0, sizeof(struct rtc_wkalrm)); -+ err = ops->read_alarm(class_dev->dev, alarm); -+ } -+ return err; -+} -+EXPORT_SYMBOL(rtc_read_alarm); -+ -+int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) |
