summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2006-06-18 14:27:20 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2006-06-18 14:27:20 +0000
commitdbfc7f5cf42dd467ae93d8fd8fc2a489fd04e5ec (patch)
treec6e15ee80cf87583a7d468acf3c47634b6cd2492
parente78a46b537ae5fb3a0fec473de26cd38c6ae735a (diff)
linux-oz-2.6: Add 2.6.17. Sync changes accross all .bb files. Classify more patches. Fix a logo bug reported by Dirk on Tosa. Rework the poodle patches and remove their hack status.
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/00-hostap.patch45
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/10-pcnet.patch27
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/24-hostap_cs_id.diff107
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc1.patch61
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc2.patch26
-rw-r--r--packages/linux/linux-openzaurus-2.6.16+git/squashfs3.0-2.6.15.patch4173
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/.mtn2git_empty0
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/00-hostap.patch45
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/10-pcnet.patch27
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/add-oz-release-string.patch24
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-akita1565
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-c7x01601
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-collie1147
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-ipaq-pxa2701021
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-poodle1549
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-qemuarm934
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-spitz1565
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-tosa1601
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/hrw-pcmcia-ids-r2.patch42
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/locomo-kbd-hotkeys.patch48
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/locomo-lcd-def-bightness.patch11
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/locomo-sysrq+keyrepeat.patch49
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/pxa-serial-hack.patch73
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/squashfs3.0-2.6.15.patch4173
-rw-r--r--packages/linux/linux-openzaurus_2.6.16+git.bb35
-rw-r--r--packages/linux/linux-openzaurus_2.6.16.bb25
-rw-r--r--packages/linux/linux-openzaurus_2.6.17.bb117
29 files changed, 20035 insertions, 223 deletions
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/00-hostap.patch b/packages/linux/linux-openzaurus-2.6.16+git/00-hostap.patch
new file mode 100644
index 0000000000..20432b404a
--- /dev/null
+++ b/packages/linux/linux-openzaurus-2.6.16+git/00-hostap.patch
@@ -0,0 +1,45 @@
+Platform: Sharp Zaurus C760 running 2.6.16 and pcmciautils 013.
+
+root@c7x0:~# pccardctl ident
+Socket 0:
+ product info: "Pretec", "CompactWLAN Card 802.11b", "2.5"
+ manfid: 0x0156, 0x0002
+ function: 6 (network)
+
+==========================================================================
+From: Jochen Friedrich
+
+Yet another card known to work OK with hostap_cs:
+
+# pccardctl ident
+Socket 0:
+ no product info available
+Socket 1:
+ product info: "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02", ""
+ manfid: 0x0156, 0x0002
+ function: 6 (network)
+
+==========================================================================
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+ drivers/net/wireless/hostap/hostap_cs.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: linux/drivers/net/wireless/hostap/hostap_cs.c
+===================================================================
+--- linux.orig/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:23:00.000000000 +0200
++++ linux/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:25:45.000000000 +0200
+@@ -923,6 +923,12 @@
+ PCMCIA_DEVICE_PROD_ID12(
+ "ZoomAir 11Mbps High", "Rate wireless Networking",
+ 0x273fe3db, 0x32a1eaee),
++ PCMCIA_DEVICE_PROD_ID123(
++ "Pretec", "CompactWLAN Card 802.11b", "2.5",
++ 0x1cadd3e5, 0xe697636c, 0x7a5bfcf1),
++ PCMCIA_DEVICE_PROD_ID123(
++ "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02",
++ 0xc7b8df9d, 0x1700d087, 0x4b74baa0),
+ PCMCIA_DEVICE_NULL
+ };
+ MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/10-pcnet.patch b/packages/linux/linux-openzaurus-2.6.16+git/10-pcnet.patch
new file mode 100644
index 0000000000..2e1966e837
--- /dev/null
+++ b/packages/linux/linux-openzaurus-2.6.16+git/10-pcnet.patch
@@ -0,0 +1,27 @@
+
+From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+Add TRENDnet TE-CF100 ethernet adapter to pcnet_cs list.
+
+product info: "Fast Ethernet", "CF Size PC Card", "1.0", ""
+ manfid: 0x0149, 0xc1ab
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+ drivers/net/pcmcia/pcnet_cs.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: netdev-2.6/drivers/net/pcmcia/pcnet_cs.c
+===================================================================
+--- netdev-2.6.orig/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:06:43.294022480 +0200
++++ netdev-2.6/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:10:31.548322552 +0200
+@@ -1768,6 +1768,8 @@
+ PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "NE2K.cis"),
+ PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"),
+ PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
++ PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
++ 0xb4be14e3, 0x43ac239b, 0x0877b627),
+ PCMCIA_DEVICE_NULL
+ };
+ MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
+
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/24-hostap_cs_id.diff b/packages/linux/linux-openzaurus-2.6.16+git/24-hostap_cs_id.diff
deleted file mode 100644
index b90ead9e4f..0000000000
--- a/packages/linux/linux-openzaurus-2.6.16+git/24-hostap_cs_id.diff
+++ /dev/null
@@ -1,107 +0,0 @@
-Add more IDs for PCMCIA cards
-
-From: Pavel Roskin <proski@gnu.org>
-
-Add string IDs for cards that were covered by 0x0156,0x0002, which is no
-longer used in hostap_cs due to conflict with Orinoco cards.
-
-Also add more IDs for cards that are supported by linux-wlan-ng. Thanks
-to Arnold Schulz <arnysch@gmx.net> for providing the list.
-
-Signed-off-by: Pavel Roskin <proski@gnu.org>
----
-
- drivers/net/wireless/hostap/hostap_cs.c | 46 +++++++++++++++++++++++++++++++
- 1 files changed, 46 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
-index 55bed92..9ac1aec 100644
---- a/drivers/net/wireless/hostap/hostap_cs.c
-+++ b/drivers/net/wireless/hostap/hostap_cs.c
-@@ -832,9 +832,11 @@ static int hostap_cs_resume(struct pcmci
- static struct pcmcia_device_id hostap_cs_ids[] = {
- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100),
- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300),
-+ PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002),
- PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777),
- PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000),
- PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002),
-+ PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008),
- PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002),
- PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030b),
- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612),
-@@ -844,7 +846,10 @@ static struct pcmcia_device_id hostap_cs
- PCMCIA_DEVICE_MANF_CARD(0x02d2, 0x0001),
- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x0001),
- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300),
-+ PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021),
-+ PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008),
- PCMCIA_DEVICE_MANF_CARD(0xc00f, 0x0000),
-+ PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002),
- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002),
- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005),
- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0010),
-@@ -862,22 +867,63 @@ static struct pcmcia_device_id hostap_cs
- "Addtron", "AWP-100 Wireless PCMCIA", "Version 01.02",
- 0xe6ec52ce, 0x08649af2, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID123(
-+ "Belkin", "11Mbps Wireless Notebook Network Adapter",
-+ "Version 01.02", 0x3805a391, 0xad4c7744, 0x4b74baa0),
-+ PCMCIA_DEVICE_PROD_ID123(
- "D", "Link DWL-650 11Mbps WLAN Card", "Version 01.02",
- 0x71b18589, 0xb6f1b0ab, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID123(
- "Instant Wireless ", " Network PC CARD", "Version 01.02",
- 0x11d901af, 0x6e9bd926, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID123(
-+ "Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P",
-+ 0x4b801a17, 0xf222ec2d, 0x630d52b2),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "OEM", "PRISM2 IEEE 802.11 PC-Card", "Version 01.02",
-+ 0xfea54c90, 0x48f2bdd6, 0x4b74baa0),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "Pretec", "CompactWLAN Card 802.11b", "2.5",
-+ 0x1cadd3e5, 0xe697636c, 0x7a5bfcf1),
-+ PCMCIA_DEVICE_PROD_ID123(
- "SMC", "SMC2632W", "Version 01.02",
- 0xc4f8b18b, 0x474a1f2a, 0x4b74baa0),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "The Linksys Group, Inc.", "Instant Wireless Network PC Card",
-+ "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02",
-+ 0xc7b8df9d, 0x1700d087, 0x4b74baa0),
-+ PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25",
-+ 0x78fc06ee, 0xdb9aa842),
-+ PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25",
-+ 0x78fc06ee, 0x45a50c1e),
- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G",
- 0x2decece3, 0x82067c18),
- PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card",
- 0x54f7c49c, 0x15a75e5b),
-+ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11",
-+ 0x5261440f, 0xa6405584),
-+ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11",
-+ 0x5261440f, 0xdf6115f9),
-+ PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card",
-+ 0x71b18589, 0xf144e3ac),
-+ PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100",
-+ 0xfdd73470, 0xe0b6f146),
- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE",
- 0x74c5e40d, 0xdb472a18),
-+ PCMCIA_DEVICE_PROD_ID12("LeArtery",
-+ "SYNCBYAIR 11Mbps Wireless LAN PC Card",
-+ 0x7e3b326a, 0x49893e92),
- PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card",
- 0x0733cc81, 0x0c52f395),
-+ PCMCIA_DEVICE_PROD_ID12("NETGEAR MA401 Wireless PC", "Card",
-+ 0xa37434e9, 0x9762e8f1),
-+ PCMCIA_DEVICE_PROD_ID12("OTC", "Wireless AirEZY 2411-PCC WLAN Card",
-+ 0x4ac44287, 0x235a6bed),
-+ PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-CF110",
-+ 0x209f40ab, 0xd9715264),
-+ PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-NS110",
-+ 0x209f40ab, 0x46263178),
- PCMCIA_DEVICE_PROD_ID12(
- "ZoomAir 11Mbps High", "Rate wireless Networking",
- 0x273fe3db, 0x32a1eaee),
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc1.patch b/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc1.patch
deleted file mode 100644
index 054b48d28d..0000000000
--- a/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc1.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-
-The CSD contains a "read2write factor" which determines the multiplier to
-be applied to the read timeout to obtain the write timeout. We were
-ignoring this parameter, resulting in the possibility for writes being
-timed out too early.
-
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-
-diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
---- a/drivers/mmc/mmc.c
-+++ b/drivers/mmc/mmc.c
-@@ -549,6 +549,7 @@ static void mmc_decode_csd(struct mmc_ca
- csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
- csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
- csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
-+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
- csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
- csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
- } else {
-@@ -583,6 +584,7 @@ static void mmc_decode_csd(struct mmc_ca
- csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
- csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
- csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
-+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
- csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
- csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
- }
-diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
---- a/drivers/mmc/mmc_block.c
-+++ b/drivers/mmc/mmc_block.c
-@@ -187,6 +187,12 @@ static int mmc_blk_issue_rq(struct mmc_q
- brq.cmd.opcode = MMC_WRITE_BLOCK;
- brq.data.flags |= MMC_DATA_WRITE;
- brq.data.blocks = 1;
-+
-+ /*
-+ * Scale up the timeout by the r2w factor
-+ */
-+ brq.data.timeout_ns <<= card->csd.r2w_factor;
-+ brq.data.timeout_clks <<= card->csd.r2w_factor;
- }
-
- if (brq.data.blocks > 1) {
-diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
---- a/include/linux/mmc/card.h
-+++ b/include/linux/mmc/card.h
-@@ -28,6 +28,7 @@ struct mmc_csd {
- unsigned short cmdclass;
- unsigned short tacc_clks;
- unsigned int tacc_ns;
-+ unsigned int r2w_factor;
- unsigned int max_dtr;
- unsigned int read_blkbits;
- unsigned int write_blkbits;
-
-
--------------------------------------------------------------------
-List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
-FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
-Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
-
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc2.patch b/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc2.patch
deleted file mode 100644
index cef02436d6..0000000000
--- a/packages/linux/linux-openzaurus-2.6.16+git/rmk-mmc2.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-
-Always send a stop command at the end of a data transfer. If we avoid
-sending the stop command, some cards remain in data transfer mode, and
-refuse to accept further read/write commands.
-
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-
-diff --git a/drivers/mmc/pxamci.c b/drivers/mmc/pxamci.c
---- a/drivers/mmc/pxamci.c
-+++ b/drivers/mmc/pxamci.c
-@@ -291,7 +291,7 @@ static int pxamci_data_done(struct pxamc
- pxamci_disable_irq(host, DATA_TRAN_DONE);
-
- host->data = NULL;
-- if (host->mrq->stop && data->error == MMC_ERR_NONE) {
-+ if (host->mrq->stop) {
- pxamci_stop_clock(host);
- pxamci_start_cmd(host, host->mrq->stop, 0);
- } else {
-
-
--------------------------------------------------------------------
-List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
-FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
-Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
-
diff --git a/packages/linux/linux-openzaurus-2.6.16+git/squashfs3.0-2.6.15.patch b/packages/linux/linux-openzaurus-2.6.16+git/squashfs3.0-2.6.15.patch
new file mode 100644
index 0000000000..f88dbbae8e
--- /dev/null
+++ b/packages/linux/linux-openzaurus-2.6.16+git/squashfs3.0-2.6.15.patch
@@ -0,0 +1,4173 @@
+diff --new-file -urp linux-2.6.15/fs/Kconfig linux-2.6.15-squashfs3.0/fs/Kconfig
+--- linux-2.6.15/fs/Kconfig 2006-03-01 22:37:27.000000000 +0000
++++ linux-2.6.15-squashfs3.0/fs/Kconfig 2006-03-07 21:12:37.000000000 +0000
+@@ -1151,6 +1151,71 @@ config CRAMFS
+
+ If unsure, say N.
+
++config SQUASHFS
++ tristate "SquashFS 3.0 - Squashed file system support"
++ select ZLIB_INFLATE
++ help
++ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
++ System). Squashfs is a highly compressed read-only filesystem for Linux.
++ It uses zlib compression to compress both files, inodes and directories.
++ Inodes in the system are very small and all blocks are packed to minimise
++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
++ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
++ uid/gid information, hard links and timestamps.
++
++ Squashfs is intended for general read-only filesystem use, for archival
++ use (i.e. in cases where a .tar.gz file may be used), and in embedded
++ systems where low overhead is needed. Further information and filesystem tools
++ are available from http://squashfs.sourceforge.net.
++
++ If you want to compile this as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called squashfs. Note that the root file system (the one
++ containing the directory /) cannot be compiled as a module.
++
++ If unsure, say N.
++
++config SQUASHFS_EMBEDDED
++
++ bool "Additional options for memory-constrained systems"
++ depends on SQUASHFS
++ default n
++ help
++ Saying Y here allows you to specify cache sizes and how Squashfs
++ allocates memory. This is only intended for memory constrained
++ systems.
++
++ If unsure, say N.
++
++config SQUASHFS_FRAGMENT_CACHE_SIZE
++ int "Number of fragments cached" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default "3"
++ help
++ By default SquashFS caches the last 3 fragments read from
++ the filesystem. Increasing this amount may mean SquashFS
++ has to re-read fragments less often from disk, at the expense
++ of extra system memory. Decreasing this amount will mean
++ SquashFS uses less memory at the expense of extra reads from disk.
++
++ Note there must be at least one cached fragment. Anything
++ much more than three will probably not make much difference.
++
++config SQUASHFS_VMALLOC
++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default n
++ help
++ By default SquashFS uses kmalloc to obtain fragment cache memory.
++ Kmalloc memory is the standard kernel allocator, but it can fail
++ on memory constrained systems. Because of the way Vmalloc works,
++ Vmalloc can succeed when kmalloc fails. Specifying this option
++ will make SquashFS always use Vmalloc to allocate the
++ fragment cache memory.
++
++ If unsure, say N.
++
+ config VXFS_FS
+ tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+ help
+diff --new-file -urp linux-2.6.15/fs/Makefile linux-2.6.15-squashfs3.0/fs/Makefile
+--- linux-2.6.15/fs/Makefile 2006-03-01 22:37:27.000000000 +0000
++++ linux-2.6.15-squashfs3.0/fs/Makefile 2006-03-07 21:12:37.000000000 +0000
+@@ -55,6 +55,7 @@ obj-$(CONFIG_EXT3_FS) += ext3/ # Before
+ obj-$(CONFIG_JBD) += jbd/
+ obj-$(CONFIG_EXT2_FS) += ext2/
+ obj-$(CONFIG_CRAMFS) += cramfs/
++obj-$(CONFIG_SQUASHFS) += squashfs/
+ obj-$(CONFIG_RAMFS) += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
+diff --new-file -urp linux-2.6.15/fs/squashfs/inode.c linux-2.6.15-squashfs3.0/fs/squashfs/inode.c
+--- linux-2.6.15/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.15-squashfs3.0/fs/squashfs/inode.c 2006-03-07 21:12:37.000000000 +0000
+@@ -0,0 +1,2127 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * 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; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * inode.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++
++static void squashfs_put_super(struct super_block *);
++static int squashfs_statfs(struct super_block *, struct kstatfs *);
++static int squashfs_symlink_readpage(struct file *file, struct page *page);
++static int squashfs_readpage(struct file *file, struct page *page);
++static int squashfs_readpage4K(struct file *file, struct page *page);
++static int squashfs_readdir(struct file *, void *, filldir_t);
++static struct inode *squashfs_alloc_inode(struct super_block *sb);
++static void squashfs_destroy_inode(struct inode *inode);
++static int init_inodecache(void);
++static void destroy_inodecache(void);
++static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
++ struct nameidata *);
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++static struct super_block *squashfs_get_sb(struct file_system_type *, int,
++ const char *, void *);
++
++
++static z_stream stream;
++
++static struct file_system_type squashfs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "squashfs",
++ .get_sb = squashfs_get_sb,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static struct super_operations squashfs_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
++ .readpage = squashfs_symlink_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops = {
++ .readpage = squashfs_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
++ .readpage = squashfs_readpage4K
++};
++
++static struct file_operations squashfs_dir_ops = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir
++};
++
++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
++ .lookup = squashfs_lookup
++};
++
++
++static struct buffer_head *get_block_length(struct super_block *s,
++ int *cur_index, int *offset, int *c_byte)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned short temp;
++ struct buffer_head *bh;
++
++ if (!(bh = sb_bread(s, *cur_index)))
++ goto out;
++
++ if (msblk->devblksize - *offset == 1) {
++ if (msblk->swap)
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ else
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ if (msblk->swap)
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ bh->b_data);
++ else
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ bh->b_data);
++ *c_byte = temp;
++ *offset = 1;
++ } else {
++ if (msblk->swap) {
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ } else {
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ }
++ *c_byte = temp;
++ *offset += 2;
++ }
++
++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
++ if (*offset == msblk->devblksize) {
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ *offset = 0;
++ }
++ if (*((unsigned char *) (bh->b_data + *offset)) !=
++ SQUASHFS_MARKER_BYTE) {
++ ERROR("Metadata block marker corrupt @ %x\n",
++ *cur_index);
++ brelse(bh);
++ goto out;
++ }
++ (*offset)++;
++ }
++ return bh;
++
++out:
++ return NULL;
++}
++
++
++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
++ msblk->devblksize_log2) + 2];
++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
++ unsigned int cur_index = index >> msblk->devblksize_log2;
++ int bytes, avail_bytes, b = 0, k;
++ char *c_buffer;
++ unsigned int compressed;
++ unsigned int c_byte = length;
++
++ if (c_byte) {
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ if (!(bh[0] = sb_getblk(s, cur_index)))
++ goto block_release;
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b, bh);
++ } else {
++ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
++ &c_byte)))
++ goto read_failure;
++
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b - 1, bh + 1);
++ }
++
++ if (compressed)
++ down(&msblk->read_data_mutex);
++
++ for (bytes = 0, k = 0; k < b; k++) {
++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
++ msblk->devblksize - offset :
++ c_byte - bytes;
++ wait_on_buffer(bh[k]);
++ if (!buffer_uptodate(bh[k]))
++ goto block_release;
++ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++
++ /*
++ * uncompress block
++ */
++ if (compressed) {
++ int zlib_err;
++
++ stream.next_in = c_buffer;
++ stream.avail_in = c_byte;
++ stream.next_out = buffer;
++ stream.avail_out = msblk->read_size;
++
++ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
++ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
++ != Z_STREAM_END) || ((zlib_err =
++ zlib_inflateEnd(&stream)) != Z_OK)) {
++ ERROR("zlib_fs returned unexpected result 0x%x\n",
++ zlib_err);
++ bytes = 0;
++ } else
++ bytes = stream.total_out;
++
++ up(&msblk->read_data_mutex);
++ }
++
++ if (next_index)
++ *next_index = index + c_byte + (length ? 0 :
++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
++ ? 3 : 2));
++ return bytes;
++
++block_release:
++ while (--b >= 0)
++ brelse(bh[b]);
++
++read_failure:
++ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
++ return 0;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int n, i, bytes, return_length = length;
++ long long next_index;
++
++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++ while ( 1 ) {
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (msblk->block_cache[i].block == block)
++ break;
++
++ down(&msblk->block_cache_mutex);
++
++ if (i == SQUASHFS_CACHED_BLKS) {
++ /* read inode header block */
++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
++ n ; n --, i = (i + 1) %
++ SQUASHFS_CACHED_BLKS)
++ if (msblk->block_cache[i].block !=
++ SQUASHFS_USED_BLK)
++ break;
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->waitq, &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->block_cache_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->waitq, &wait);
++ continue;
++ }
++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
++
++ if (msblk->block_cache[i].block ==
++ SQUASHFS_INVALID_BLK) {
++ if (!(msblk->block_cache[i].data =
++ kmalloc(SQUASHFS_METADATA_SIZE,
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate cache"
++ "block\n");
++ up(&msblk->block_cache_mutex);
++ goto out;
++ }
++ }
++
++ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
++ up(&msblk->block_cache_mutex);
++
++ if (!(msblk->block_cache[i].length =
++ squashfs_read_data(s,
++ msblk->block_cache[i].data,
++ block, 0, &next_index))) {
++ ERROR("Unable to read cache block [%llx:%x]\n",
++