Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) ===================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) AACRAID Driver for Linux (take two)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) ===================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) Introduction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) The aacraid driver adds support for Adaptec (http://www.adaptec.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) RAID controllers. This is a major rewrite from the original
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) Adaptec supplied driver. It has significantly cleaned up both the code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) and the running binary size (the module is less than half the size of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) the original).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) Supported Cards/Chipsets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) ========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	===================	=======	=======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	PCI ID (pci.ids)	OEM	Product
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	===================	=======	=======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	9005:0285:9005:0285	Adaptec	2200S (Vulcan)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	9005:0285:9005:0286	Adaptec	2120S (Crusader)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	9005:0285:9005:0287	Adaptec	2200S (Vulcan-2m)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	9005:0285:9005:0288	Adaptec	3230S (Harrier)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	9005:0285:9005:0289	Adaptec	3240S (Tornado)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	9005:0285:9005:028a	Adaptec	2020ZCR (Skyhawk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	9005:0285:9005:028b	Adaptec	2025ZCR (Terminator)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	9005:0286:9005:028c	Adaptec	2230S (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	9005:0286:9005:028c	Adaptec	2230SLP (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	9005:0286:9005:028d	Adaptec	2130S (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	9005:0285:9005:028e	Adaptec	2020SA (Skyhawk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	9005:0285:9005:028f	Adaptec	2025SA (Terminator)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	9005:0285:9005:0290	Adaptec	2410SA (Jaguar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	9005:0285:103c:3227	Adaptec	2610SA (Bearcat HP release)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	9005:0285:9005:0293	Adaptec	21610SA (Corsair-16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	9005:0285:9005:0296	Adaptec	2240S (SabreExpress)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	9005:0285:9005:0292	Adaptec	2810SA (Corsair-8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	9005:0285:9005:0297	Adaptec	4005 (AvonPark)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	9005:0285:9005:0298	Adaptec	4000 (BlackBird)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	9005:0285:9005:0299	Adaptec	4800SAS (Marauder-X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	9005:0285:9005:029a	Adaptec	4805SAS (Marauder-E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	9005:0286:9005:029b	Adaptec	2820SA (Intruder)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	9005:0286:9005:029c	Adaptec	2620SA (Intruder)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	9005:0286:9005:029d	Adaptec	2420SA (Intruder HP release)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	9005:0286:9005:02ac	Adaptec	1800 (Typhoon44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	9005:0285:9005:02b5	Adaptec	5445 (Voodoo44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	9005:0285:15d9:02b5	SMC	AOC-USAS-S4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	9005:0285:9005:02b6	Adaptec	5805 (Voodoo80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	9005:0285:15d9:02b6	SMC	AOC-USAS-S8i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	9005:0285:9005:02b7	Adaptec	5085 (Voodoo08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	9005:0285:9005:02bb	Adaptec	3405 (Marauder40LP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	9005:0285:9005:02bc	Adaptec	3805 (Marauder80LP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	9005:0285:9005:02c7	Adaptec	3085 (Marauder08ELP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	9005:0285:9005:02bd	Adaptec	31205 (Marauder120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	9005:0285:9005:02be	Adaptec	31605 (Marauder160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	9005:0285:9005:02c3	Adaptec	51205 (Voodoo120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	9005:0285:9005:02c4	Adaptec	51605 (Voodoo160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	9005:0285:15d9:02c9	SMC	AOC-USAS-S4iR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	9005:0285:15d9:02ca	SMC	AOC-USAS-S8iR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	9005:0285:9005:02ce	Adaptec	51245 (Voodoo124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	9005:0285:9005:02cf	Adaptec	51645 (Voodoo164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	9005:0285:9005:02d0	Adaptec	52445 (Voodoo244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	9005:0285:9005:02d1	Adaptec	5405 (Voodoo40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	9005:0285:15d9:02d2	SMC	AOC-USAS-S8i-LP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	9005:0285:15d9:02d3	SMC	AOC-USAS-S8iR-LP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	9005:0285:9005:02d4	Adaptec	ASR-2045 (Voodoo04 Lite)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	9005:0285:9005:02d5	Adaptec	ASR-2405 (Voodoo40 Lite)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	9005:0285:9005:02d6	Adaptec	ASR-2445 (Voodoo44 Lite)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	9005:0285:9005:02d7	Adaptec	ASR-2805 (Voodoo80 Lite)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	9005:0285:9005:02d8	Adaptec	5405Z (Voodoo40 BLBU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	9005:0285:9005:02d9	Adaptec	5445Z (Voodoo44 BLBU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	9005:0285:9005:02da	Adaptec	5805Z (Voodoo80 BLBU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	1011:0046:9005:0364	Adaptec	5400S (Mustang)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	1011:0046:9005:0365	Adaptec	5400S (Mustang)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	9005:0287:9005:0800	Adaptec	Themisto (Jupiter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	9005:0200:9005:0200	Adaptec	Themisto (Jupiter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	9005:0286:9005:0800	Adaptec	Callisto (Jupiter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	1011:0046:9005:1364	Dell	PERC 2/QC (Quad Channel, Mustang)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	1011:0046:9005:1365	Dell	PERC 2/QC (Quad Channel, Mustang)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	1028:0001:1028:0001	Dell	PERC 2/Si (Iguana)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	1028:0003:1028:0003	Dell	PERC 3/Si (SlimFast)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	1028:0002:1028:0002	Dell	PERC 3/Di (Opal)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	1028:0004:1028:0004	Dell	PERC 3/SiF (Iguana)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	1028:0004:1028:00d0	Dell	PERC 3/DiF (Iguana)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	1028:0002:1028:00d1	Dell	PERC 3/DiV (Viper)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	1028:0002:1028:00d9	Dell	PERC 3/DiL (Lexus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	1028:000a:1028:0106	Dell	PERC 3/DiJ (Jaguar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	1028:000a:1028:011b	Dell	PERC 3/DiD (Dagger)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	1028:000a:1028:0121	Dell	PERC 3/DiB (Boxster)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	9005:0285:1028:0287	Dell	PERC 320/DC (Vulcan)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	9005:0285:1028:0291	Dell	CERC 2 (DellCorsair)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	1011:0046:103c:10c2	HP	NetRAID-4M (Mustang)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	9005:0285:17aa:0286	Legend	S220 (Crusader)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	9005:0285:17aa:0287	Legend	S230 (Vulcan)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	9005:0285:9005:0290	IBM	ServeRAID 7t (Jaguar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	9005:0285:1014:02F2	IBM	ServeRAID 8i (AvonPark)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	9005:0286:1014:9540	IBM	ServeRAID 8k/8k-l4 (AuroraLite)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	9005:0286:1014:9580	IBM	ServeRAID 8k/8k-l8 (Aurora)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	9005:0285:1014:034d	IBM	ServeRAID 8s (Marauder-E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	9005:0286:9005:029e	ICP	ICP9024RO (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	9005:0286:9005:029f	ICP	ICP9014RO (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	9005:0286:9005:02a0	ICP	ICP9047MA (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	9005:0286:9005:02a1	ICP	ICP9087MA (Lancer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	9005:0285:9005:02a4	ICP	ICP9085LI (Marauder-X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	9005:0285:9005:02a5	ICP	ICP5085BR (Marauder-E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	9005:0286:9005:02a6	ICP	ICP9067MA (Intruder-6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	9005:0285:9005:02b2	ICP	(Voodoo 8 internal 8 external)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	9005:0285:9005:02b8	ICP	ICP5445SL (Voodoo44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	9005:0285:9005:02b9	ICP	ICP5085SL (Voodoo80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	9005:0285:9005:02ba	ICP	ICP5805SL (Voodoo08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	9005:0285:9005:02bf	ICP	ICP5045BL (Marauder40LP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	9005:0285:9005:02c0	ICP	ICP5085BL (Marauder80LP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	9005:0285:9005:02c8	ICP	ICP5805BL (Marauder08ELP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	9005:0285:9005:02c1	ICP	ICP5125BR (Marauder120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	9005:0285:9005:02c2	ICP	ICP5165BR (Marauder160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	9005:0285:9005:02c5	ICP	ICP5125SL (Voodoo120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	9005:0285:9005:02c6	ICP	ICP5165SL (Voodoo160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	9005:0286:9005:02ab		(Typhoon40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	9005:0286:9005:02ad		(Aurora ARK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	9005:0286:9005:02ae		(Aurora Lite ARK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	9005:0285:9005:02b0		(Sunrise Lake ARK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	9005:0285:9005:02b1	Adaptec	(Voodoo 8 internal 8 external)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	9005:0285:108e:7aac	SUN	STK RAID REM (Voodoo44 Coyote)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	9005:0285:108e:0286	SUN	STK RAID INT (Cougar)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	9005:0285:108e:0287	SUN	STK RAID EXT (Prometheus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	9005:0285:108e:7aae	SUN	STK RAID EM (Narvi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	===================	=======	=======================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) People
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) ======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) Alan Cox <alan@lxorguk.ukuu.org.uk>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) Christoph Hellwig <hch@infradead.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) - updates for new-style PCI probing and SCSI host registration,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)   small cleanups/fixes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) Matt Domsch <matt_domsch@dell.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) - revision ioctl, adapter messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) Deanna Bonds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) - non-DASD support, PAE fibs and 64 bit, added new adaptec controllers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)   added new ioctls, changed scsi interface to use new error handler,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)   increased the number of fibs and outstanding commands to a container
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) - fixed 64bit and 64G memory model, changed confusing naming convention
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)   where fibs that go to the hardware are consistently called hw_fibs and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)   not just fibs like the name of the driver tracking structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) Mark Salyzyn <Mark_Salyzyn@adaptec.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) - Fixed panic issues and added some new product ids for upcoming hbas.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) - Performance tuning, card failover and bug mitigations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) Achim Leubner <Achim_Leubner@adaptec.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) - Original Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) -------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) Adaptec Unix OEM Product Group
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) Mailing List
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) linux-scsi@vger.kernel.org (Interested parties troll here)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) Also note this is very different to Brian's original driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) so don't expect him to support it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) Adaptec does support this driver.  Contact Adaptec tech support or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) aacraid@adaptec.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) Original by Brian Boerner February 2001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) Rewritten by Alan Cox, November 2001